正则表达式-负向零宽断言

阅读: 4077    发布时间: 2018-01-29 11:50:46

还是从例子开始,假设我们想从一个字符串中,把所有数字提取出来,而且如果数字后面是字母“q”的不要,如“123qqww34eeew2w”,我们只想要 34 和 2,123因为后面是q,不要

我们来分析一下, 提取的规则应该是 有1到多个数字,这个数字后面跟的不是“q”且不能是数字(否则会把12提取出来),利用我们前面学的可能你会写成这样“\d+[^\d|q]”,这样提取出来的是“34e”和“2w”,不满足要求。

(?!exp),称为零宽度负预测先行断言,断言此位置的后面不能匹配表达式exp,如“\d+(?!\d|q)”,代表提取这样的数字,该数字包含1到多个数,但是后面不能再有数字或者q

var patt=/\d+(?!\d|q)/g

var str="123qqww34eeew2w"
console.log(str.match(patt))  //提取到34  2


(?<!exp),称为零宽度负回顾后发断言来,断言此位置的前面不能匹配表达式exp。如字符串“qqq123www456www”找出前面不是q的数字,“(?<!q|\d)\d+”

var patt=/(?<!q|\d)\d+/g

var str="qqq123www456www"
console.log(str.match(patt))   //提取到456


-END-