正则表达式总结

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并返回

  如何解决正则的贪婪性?=> 通过在量词元字符后面加"?"就可以解决了(上面也有总结)。

 

posted @ 2021-12-08 18:07  闯入码途的水产人  阅读(63)  评论(0编辑  收藏  举报