正则非捕获分组匹配--零宽断言

1,920 阅读2分钟

非捕获分组

非捕获分组:匹配regex但不获取匹配结果,不进行存储供以后使用,避免浪费内存

(?:regex)

匹配到regex后,不获取匹配结果

/(?:\d)(.*?)(?:[a-z])/ //匹配中间分组

向前查找(?=regex)

以regex作为限制项进行匹配,匹配到这个子表达式后,就会继续向前查找(匹配以regex结尾的单词的前面部分(除了regex以外的部分))

//匹配的是HTML标签内里的内容(再次提醒,不包括前缀和后缀本身)
/(?<=<(\w+)>).*(?=<\/\1>)/

/(?<=<(\w+)>)/ //匹配以<word字符>开头的
/(?=<\/\1>)/   //匹配以</word字符>结尾的

负前向查找(?!regex)

以regex作为限制,向前查找,被指定的子表达式不能被匹配到(匹配不以regex结尾的单词的前面部分,或者不包含匹配regex的单词)

例如:
/\d{3}(?![a-z])/    匹配后面不是小写字母的三位数字; //匹配不以小写字母结尾的字符串的前面部分

/\b((?!abc)\w)+\b/  匹配不包含连续字符串abc的单词。
/^(?!.*diversity)/  匹配不包含连续字符串diversity的字符串

前后查找(?<=regex)

以regex作为限制项进行匹配,匹配到这个子表达式后,就会继续向后查找(匹配以regex开头的单词的后面部分(除了regex以外的部分))

负前后查找(?<!regex)

以regex作为限制,向后查找,被指定的子表达式不能被匹配到(匹配不以regex开头的单词的后面部分,或者不包含匹配regex开头的单词)

注意:只能写在前面限制后面,向后查找,如果后面没有查找内容,则没有限制

例如:
/(?<![a-z])\d{7}/ 匹配前面不是小写字母的七位数字。//匹配不以小写字母开头的字符串的后面部分
var str = 'apple people';
只想找到apple的ple,匹配以ap开头的ple
/(?<=ap)ple/ 或者 /(?<!peo)ple/

友情链接:

juejin.cn/post/684490…

www.cnblogs.com/shangdawei/…