我有以下正则表达式
var reg = /\b\w+(?=ing)\b/g;
var str = "I'm singing while you're dancing";
str.match(reg) // ==>null
但如果正则表达式是/\b\w+(?=ing\b)/g
那么str可以匹配'sing,danc'
为什么那个马赫,但我之前的例子没有?
答案 0 :(得分:4)
因为(?=ing)
是零长度匹配。因此,您要尝试匹配一个或多个单词字符,然后按'同时后面跟着一个单词边界。
因为单词边界是从单词字符到非单词字符的变化,所以单词字符后跟“' i'之后没有单词边界。
/\b\w+(?=ing\b)/g
符合' s'在'唱歌,danc'因为','是一个非字的字符 - 因此在' g'之间有一个字边界。和','。要找到正确的正则表达式,您需要更清楚为什么要唱歌,danc'不应该匹配。
答案 1 :(得分:1)
您需要删除末尾的\ b,因为您要匹配的部分不会在边界上结束。 danc和唱歌会批量\ b \ w + \ b但跳舞和唱歌不会
\b\w+(?=ing)
查看演示here
\b\w+(?=ing\b)
将确保您的ing位于边界而不是
\w+
部分