JS中的正则RegExp
一 正则表达式书写
1. 正则表达式的构成
模式+修饰符(可选)
如 /lzc/i 是一个正则表达式,由**模式**和**修饰符**俩部分构成
lzc是模式
i是修饰符
2. 模式的书写规则
- 括号[ ]的意义
表达式 | 说明 |
---|---|
[abc] | 一个a或一个b或一个c |
[0-9] | 一个0-9之间的数 |
[a-zA-Z0-9] | 一个a-z之间或A-Z或0-9之间的数 |
[0-9] | 一个0-9之间的数 |
[^abc] | 一个不是a\b\c的任何数 |
[^a-c] | 一个不是a到c的任何数 |
- 竖线 | 的意义
表达式 | 说明 |
---|---|
(red|blue|green) | red或者blue或者green之中的一个 |
- 元字符
元字符只有特殊含义的字符
参考:在W3C查看详情
表达式 | 说明 |
---|---|
. | 表示任意单个字符,除了换行和行结束符 |
\w | 表示任意单词 |
\W | 表示任意非单词字符 |
\d | 表示任意数字字符 |
\D | 表示任意非数字字符 |
\s | 表示任意空白字符 |
\S | 表示非空白字符 |
\b | 表示单词的边界 |
\B | 表示非单词边界 |
\0 | NULL字符 |
\n | 换行字符 |
\f | 表示换页符 |
\r | 表示回车符 |
\t | 表示指表符 |
\v | 表示垂直制表符 |
\xxx | 表示与八进制数xxx对应的字符 |
\xdd | 表示与十六进制数dd对应的字符 |
\uxxx | 表示与十六进制数xxx对应的unicode编码 |
- 量词
参考:在W3C查看详情
量词 | 意义 |
---|---|
n{3} | 表示3个n |
n{1,5} | 表示1到5个n |
n{2,} | 表示2个或以上个n |
n? | 表示0或1个n |
n* | 表示0或以上个n |
n+ | 表示1或以上个n |
- 其它符号
符号 | 意义 |
---|---|
^abc | 表示任意以abc开头的字符串 |
abc$ | 表示任意以abc结尾的字符串 |
^abc$ | 表示既以abc开头又以abc结尾,即只表示abc自己 |
?=n | 匹配任何其后紧接指定字符串 n 的字符串 |
n* | 表示0或以上个n |
?!n | 匹配任何其后没有紧接指定字符串 n 的字符串 |
3. 修饰符的书写规则
修饰符 | 意义 |
---|---|
i | 忽略大小写差异进行匹配 ingore |
g | 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止) |
m | 执行多行匹配 |
二 正则的使用
JS中正则有俩种用法: 1通过正则对象使用 2通过字符串对象使用
-
1:构造正则对象
有三种不同的方法
var patt=/[a-h]/g //直接语量法构造
var patt = new RegExp("[a-h]") //用字符串作为参数new一个(此时无法使用修饰符)
var patt = new RegExp(/[a-h]/ , ‘gi’) // 用模式和修饰符作为参数new一个 -
2:使用正则对象的方法
上一步建出来的正则对象patt有以下三个方法
详情参考此处
正则对象的方法 | 说明 |
---|---|
test() | 检索字符串中指定的值。返回 true 或 false |
exec() | 检索字符串中指定的值。返回找到的值 |
compile() | 编译正则表达式 |
//test的示例
var str = "努力学习前端的lzc";
var patt = new RegExp(/LZc/,'i');
var result = patt.test(str);
console.log(result) //输出true
//exec的示例
var str = "努力学习前端的lzc";
var patt= new RegExp(/LZc/,'i');
var result = patt.exec(str);
console.log(result) //输出 lzc
-
3:使用字符串对象的方法
2和3选择一中即可,但3貌似更方便和强大,推荐用3
详情参考此处字符串对象的方法 说明 search() 返回第一次匹配到的位置,匹配不到则返回-1;首次匹配到之后立即退出(g无用) match() 存放匹配结果的数组 replace() 替换匹配到的字符串,并返回 split 把字符串分割为字符串数组
//search示例
var str="努力学习前端的lzc lzc"
var patt = new RegExp(/LZc/,'i');
var result=str.search(patt)
console.log(result) // 输出7
//match的示例
var str="努力学习前端的lzc lzc"
var patt = new RegExp(/LZc/,'gi');
var result=str.match(patt)
console.log(result) // 输出[ "lzc", "lzc"]
//replace的示例
var str="努力学习前端的lzc lzc"
var patt = new RegExp(/lzc/,'g');
var result=str.replace(patt,'zsy')
console.log(result) // 输出 努力学习前端的zsy zsy
//split的示例
var str="你好lzc吃了吗lzc睡了吗lzc"
var patt = /lzc/g
result = str.split(patt)
console.log(result)
//输出 [ "你好", "吃了吗", "睡了吗", "" ]
三 练习平台
不过貌似这个在线平台只能练习正则表达式的书写,不能练习正则对象和字符串对象的各种方法
或许可以在w3c上练习各个对象的方法 点此处