正则表达式
创建正则表达式
构造函数创建
- var reg = new RegExp(正则内容,修饰符);
字面量创建
- var reg=/正则内容/修饰符
修饰符(三个)
- i 不区分大小写
- g 全局匹配
- m 多行匹配
正则表达式对象的方法
test()
- 返回一个布尔值,方法用于匹配字符串,匹配成功返回true,失败返回false
exec()
- 方法检索字符串中的指定值。返回值是被找到的值。如果没有发现匹配,则返回 null。
不可以全局匹配 加g也没用
字符串匹配正则方法
match()
- 接受一个参数,正则去匹配字符串,如果匹配成功,就返回匹配成功的数组,如果匹配不成功,就返回null
- 如果没有全局匹配和exsc相同,可以全局匹配
search()
- 参数与match相同,返回字符串中第一个匹配项的索引,没有匹配项返回-1
- 只能找到第一个,不能全局匹配
replace()
- 用于替换,接受两个参数,第一个是匹配项,第二个可以是字符串或是一个函数
- 当使用全局匹配时,可以完成所有元素的匹配替换
Split()
- 把字符串分割为字符串数组。
元字符
点通配符
-
.
-
匹配一个通配(任意一个)的字符
-
c.t 就表示第一个字符是c,第二个字符是任意字符,第三个字符是t
- 一个点就表示一个字符
-
c.t 如果用. 来描述,.在这里就不是通配符了,而是表示第一个字符是c,第二个字符是.,第三个字符是t
-
方括号范围匹配
-
[]
-
表示匹配中括号中任意一个字符
-
c[aeiou]t 第一个字符是c,第二个字符可以是a,e,i,o,u中的任意一个字符,第三个字符是t
-
[0-9A-F]匹配0到9的任意数字或者大写A到大写F的任意字符(不能加逗号,可以连续写)
-
注:
- 写在中括号中的. (点)会变成转义字符的. 不是通配符
- 中括号内匹配大中小括号(所有括号),都必须加转义字符\
- 两个斜杠\在字符或者正则表达式的[]中,都是一个斜杠\
- [0-20]实际是[0-2 0]匹配的是0到2
- [a-Z]报错,unicode编码中a比Z大
- [A-z]报错,大写Z到小写a中还有其他字符
- [dabaaabcc] 注意这里出现了重复和顺序问题,这种写法其实没有任何意义,与[abcd]相同
-
方括号字符反义
-
[^]
- 在[]内第一个字符是^,表示后面的字符不用,取反
- ^^ 不选取上箭头^
- 如果^不是第一个,作为上箭头时,只表示符号,不表示反义
转义字符类
- \w查找单词字符。与[a-zA-Z_0-9]相同
- \W查找非单词字符。[^0-9A-Za-z_]相同
- \d查找数字。与[0-9]相同
- \D查找非数字字符。与[^0-9]相同
- \s查找空白字符。
- \S查找非空白字符。
重复匹配
普通重复
-
{n}
-
这里n是重复的次数,用{}表示要重复寻找。
-
a{3}表示重复3次,寻找aaa这个字符串
-
A{1}与A是相同的
-
a{2}匹配字符串a{2},并不是匹配aa
-
如果这个n是0时,例如a{0}匹配任何空字符
-
[{}]这是匹配一个{ 或者}
-
{1,4}先找匹配最大的字符串(贪婪匹配)
-
colou{0,1}r 表示匹配 colour或者color
-
x{4,4}与x{4}相同
-
A{1,}没有给后面的内容,表示1到任意数,就是找到A以后,取最长的AAAA….字符
-
{0,}表示匹配任意内容,无论是什么都可以匹配,哪怕是空字符
-
等价
- /a*/g与 /a{0,}/g
- /a+/g与/a{1,}/g
- /a?/g与/a{0,1}/g
-
非贪婪匹配
-
?*#
- 匹配最少的字符串
- ?一般用于*或者+,或者{num,}之后,用来匹配最少的部分
选择匹配
|
- 是用来选择匹配的与js中的||是相似的
- ab||cd 实际是 ab| | cd ab或者空字符串或者cd
起始和结束符
^起始符
- 与[]是不同的,n这里是表示由n就是起始字符
- 要求必须以某个开始
$结束符
- n$表示n做为结束符
- 要求必须以某个字符结束
群组
()
-
当使用match时,加上g和不加g是有差距的
- 不加g可以将每个群组列表在数组的下标1开始的元素
- 加g就不能找到群组内容
-
在replace中,如果不适用群组,后面的函数中参数第一位是符合正则的内容,第二位是符合内容的下标
-
如果使用群组,那么后面的函数中参数分别是符合正则的内容和每个群组的内容
断言
前断言,后断言(先行断言,后行断言)
前断言
-
先行断言,紧随其后
-
?=
- 查找紧随其后的内容是某个字符的条件
-
?!
- 查找紧随其后的内容不是某个字符的条件
后断言
-
后行断言,紧随其前
-
?<=
- 前面必须是某个条件,紧随其后的字符
-
?<!
- 前面必须不是某个条件,紧随其后的字符
典型案例
中文匹配
- [\u4e00 - \u9fa5]
密码等级
- /^(\d{8,16}|[a-z]{8,16}|[A-Z]{8,16})$/
- /^([0-9a-zA-Z]{8,16})$/
- /^([\w!@#$%^&*]{8,16})$/
手机号码加密
验证IP
过滤标签
匹配qq号
- /^\d{6,11}$/;
匹配手机号
- /^1[34578]\d{9}$/
匹配邮箱
- /^\w+@[a-z0-9]{2,4}.[a-z]{2,4}$/
检测网址
- /^https?😕/w{3}.\w+.[a-z]{2,4}$/i
XMind: ZEN - Trial Version