正则表达式小结(Regular Expressions)

前端之家收集整理的这篇文章主要介绍了正则表达式小结(Regular Expressions)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

(原创文章,谢绝转载~)

日常开发中,常用正则表达式方便的进行匹配、筛选工作。正则的常用内容有:

  • 一般情况下原则:从左至右,越多越好(贪婪)
  • 字符;转义:\ ,如\*,\d (数字)等
  • 选择,case1|case2|case3,

注意:对于大部分正则引擎,匹配规则是从左至右优先,因而,string|stringlong 会匹配到stringlong 的 string 部分;少数 Text-Directed Engine 的匹配规则则是最长优先,此时string|stringlong 会匹配到stringlong ;

  • 起始位置:^ ,结束位置: $, 注意^和$并不匹配字符而是匹配位置,例如 d$ 可以匹配到 end 的 d,其中end的d字符的右边位置恰为结束位置。
  • 重复数量
  1. 精确重复数量,{n},例如: char{3} 匹配charrr,r 重复3次
  2. 非精确重复数量
    • 0-1 次: ? ,例如 char? 匹配char(优先)或cha
    • 1-无穷:+ , 例如 char+ 匹配char,charr,charrr,.......其中r至少重复1次
    • 0-无穷:* , 例如 char* 匹配 cha,char,charr,.......其中r重复0次及以上
    • lazy懒惰模式,在上面三种情况下后面再加?号, ??,+?,*? ,在这种情况下,匹配越少越好,

例如 char?? ,本来一个问号是 0-1,再lazy模式,则越少越好,0次,于是char?? 可匹配 cha 而不能匹配 char

再如 char+? ,本来一个加号是1-无穷,再lazy模式,则越少越好,1次,于是char+? 可匹配 char 而不能匹配 charr ,charrr等

    • possessive占有模式,在上面三种情况下后面再加+号, ?+,++,*+ ,在这种情况下,匹配越多越好,且不回溯

例如 char++, 越多越好 ,charrrrr,有多少r匹配到多少,

另一方面,不回溯,是什么含义呢,考虑以下问题: char++r, 它能否匹配 charrrrr ?答案是不能。事实上:

cha r++ r

cha rrrr r 看过去好像可以让r++ 匹配4个r,最后一个r匹配r,这样正好匹配上,但因为独占模式是越多越好,所以第5个r 也会被 r++ 匹配到,也就是下图所示:

cha r++ r

cha rrrrr r++ 匹配到 rrrrr, 一旦匹配上则占有,不会再回溯(减少r的数量),因而 char++r 中的最后一个r ,没有东西和它匹配,所以匹配失败。

细思则有: char++r 无法匹配任何形式。。。

  • 捕获组和索引值(Capturing Groups and Backreferences )

捕获组用括号括住捕获部分,(regex),例如(regex1)(regex2){3} ,regex1 和regex2 分别为两个捕获组,且分别具有索引值1和2,

注意:索引值序列123...的编码顺序为根据括号先从左至右,从外到内递归,例如 (str1)(str(str3))(str4),str1索引值为1,(str(str3)) 整体索引值为2,str3 索引值为3,str4 索引值为 4。

猜你在找的正则表达式相关文章