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

非捕获分组

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

(?:regex)bash

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

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

向前查找(?=regex)post

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

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

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

负前向查找(?!regex)code

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

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

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

先后查找(?<=regex)blog

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

负先后查找(?<!regex)字符串

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

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

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

友情连接:

juejin.im/post/5cdcd4…

www.cnblogs.com/shangdawei/…