精确单词的正则表达式在句子中连续

时间:2017-10-26 20:23:44

标签: javascript regex

所以我试图匹配单词的所有实例" test"完全在给定的文本中,我使用以下正则表达式:

/(^|\s)test(\s|\.|$|,|!|\?|;|¿|¡)/gi

当文本类似于&#34时,它可以工作;这是一个测试。测试怎么样? 。试验#&34;但是,当您有两个或更多连续的"测试"时,它不起作用。

即:

var regex = /(^|\s)test(\s|\.|$|,|!|\?|;|¿|¡)/gi;
"test test test".match(regex); 
//returns only ["test", "test"], should be ["test", "test", "test"]

如何使正则表达式与连续的单词一起使用?

2 个答案:

答案 0 :(得分:1)

缺少第二个test,因为在匹配第一个test模式时会占用空格字符;您可以将第二个括号更改为向前看,这样它就不会消耗字符:

var regex = /(?:^|\s)test(?=\s|\.|$|,|!|\?|;|¿|¡)/gi;
console.log("test test test".match(regex)); 

答案 1 :(得分:1)

我不确定这是否是您正在寻找的,但这个正则表达式:

(?<=\W)test(?=\W)

将匹配任何前面和后面跟着非单词字符的测试单词。这样,它就不会匹配&#34; testtest&#34;例如。

请参阅Regex101.com

编辑:我很惊讶地发现JavaScript中不支持lookbehind断言(see here for example)。 我认为在你的情况下,最好的正则表达式将是评论中建议的那个:\btest\b