var re = /w(?!9)/ 或 /^w(?!9)/
var str = "wm"
这样match的结果是 w
但如果 re = /w(?!9)$/
结果是null
为啥呢 请教各位前辈
var re = /w(?!9)/ 或 /^w(?!9)/
var str = "wm"
这样match的结果是 w
但如果 re = /w(?!9)$/
结果是null
为啥呢 请教各位前辈
前瞻匹配理解为匹配位置。(?!9)是指匹配不是9前面的位置。看后面的例子可能更好理解些。
推荐在线正则图形化工具一看便知。
在线正则匹配工具
如果是/w9(?!9)$/
w9
则匹配。w(?!9)$
,w
也匹配。
(?=p),其中 p 是一个子模式,即 p 前面的位置,或者说,该位置后面的字符要匹配 p。
比如 (?=l),表示 "l" 字符前面的位置,例如:
var result = "hello".replace(/(?=l)/g, '#');
console.log(result);
// => "he#l#lo"
而 (?!p) 就是 (?=p) 的反面意思,比如:
var result = "hello".replace(/(?!l)/g, '#');
console.log(result);
// => "#h#ell#o#"
(?=p)
就与 ^
一样好理解,就是 p
前面的那个位置。
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
因为前瞻部分其实不属于匹配部分,类似于一个附加的判断条件,这里
re = /w(?!9)$/
其实是必须以w结尾。