正则表达式总结
1、每一个正则表达式都会包含元字符和修饰符。
2、正则表达式的作用主要是用来处理字符串,可以对字符串进行验证和捕获。
3、验证字符串使用的是test()方法。
4、捕获字符串可以使用exec()以及字符串的match、replace方法。
这三者的主要区别是:match不能捕获分组内容,其捕获到的是整个正则匹配的内容;而exec和replace可以捕获分组内容,同时replace是可以进行字符串替换的。replace的替换规则是替换整个正则匹配到的内容。
5、常用的修饰符:g(全局匹配)、i(忽略大小写)、m(多行匹配)。
6、常用的量词元字符:
*:匹配零到多次
+:匹配一到多次
?:匹配零次或者一次(最多一次)
{n}:匹配n次
{n,}:匹配n到多次
{n,m}:匹配n到m次
7、常用的元字符:
\: 转义符
^:匹配以某一个字符开头
$:匹配以某一个字符结尾
\n:匹配换行符
.:匹配除\n以外的所有字符
[xyz]:匹配x,y,z三者中的其中一个
[^xyz]:匹配除了xyz三者以外的任何字符
[a-z]:匹配a-z中的任何一个字符
[^a-z]:匹配除了a-z中的任何一个字符
\d:匹配一个0-9之间的任何数字,等价于[0-9]
\D:匹配除了0-9之前的任何数字
\w:匹配数字、字母、下划线中的任意一个字符
\s:匹配一个空白字符、空格、一个制表符、换页符
还要很多元字符,这里就不一一列举了。
8、在正则表达式中,“[]”中括号里面的字符都是其本身的含义,而且中括号不能识别两位数。如"/[26]/g";代表的是匹配2或者6其中的一个。
9、正则分组:
分组使用“()”。
作用:
1、改变默认的优先级。如上面提到的"/^(18|19)$/g",如果使用分组就可以只匹配18或者19,如果是/^18|19$/g则表示匹配以18开头或者19结尾的都符合。
2、分组引用
3、分组捕获。
10、在正则中问号('?')的作用:
1、放在普通的元字符后面,表示匹配0到1次。
2、放在量词元字符后面,表示取消正则的贪婪性。
3、在分组中?:表示只匹配不捕获。
11、正则具有懒惰性和贪婪性。
a、懒惰性是指正则表达式每次都是从0的位置开始匹配,具体可通过正则的lastIndex属性验证,在不做任何处理的情况下,正则的lastIndex属性值每次执行的时候都是0。
如何解决正则的懒惰性?=> 可以通过是使用全局匹配修饰符来解决正则的懒惰性:
var reg = /hello/; var str = 'helloworld'; reg.test(str) // reg.lastIndex -> 0 var reg = /hello/g; var str = 'helloworld'; reg.test(str) // reg.lastIndex -> 5
b、贪婪性是指正则的每一次捕获都是按照匹配最长的结果捕获的。如
var reg = /\d+/g; var str = 'hello2021hello2022'; // 该正则表示匹配数字1到多次,如果正则不贪婪的话,理论上匹配到第一个2的时候就可以停止,但是却没有停止匹配,而是一直匹配到1后面h的位置,发现h不符合规则,随即捕获2021并返回
如何解决正则的贪婪性?=> 通过在量词元字符后面加"?"就可以解决了(上面也有总结)。