为什么不能'\ b \ w +(?= ing)\ b'匹配“我在唱歌时唱歌”

时间:2017-08-18 07:41:23

标签: javascript regex

我有以下正则表达式

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'

为什么那个马赫,但我之前的例子没有?

2 个答案:

答案 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+

部分