还是从例子开始,假设我们想从一个字符串中,把所有数字提取出来,而且如果数字后面是字母“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