所以我试图匹配单词的所有实例" 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"]
如何使正则表达式与连续的单词一起使用?
答案 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
。