请教正则的前瞻匹配

var re = /w(?!9)/ 或 /^w(?!9)/
var str = "wm"
这样match的结果是 w

但如果 re = /w(?!9)$/
结果是null
为啥呢 请教各位前辈

阅读 2.3k
3 个回答

因为前瞻部分其实不属于匹配部分,类似于一个附加的判断条件,这里re = /w(?!9)$/其实是必须以w结尾。

/w(?!9)$/ 你这样写就是一个w 而且这个w还得是结尾

前瞻匹配理解为匹配位置。(?!9)是指匹配不是9前面的位置。看后面的例子可能更好理解些。
推荐在线正则图形化工具一看便知。
在线正则匹配工具
如果是/w9(?!9)$/
w9则匹配。
w(?!9)$也匹配。

(?=p) 和 (?!p)

(?=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 前面的那个位置。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题