正则表达式模式以计算某个出现次数

3

我正在尝试匹配一个单词,该单词前面、后面或两者都有空格。

var sample = " test-abc -test# @test _test hello-test@ test test "

与上例类似,第一个“测试”将被计数,因为它前面有一个空格,下一个不会被计数,因为它没有空格,第三个“测试”将被计数,因为它后面有一个空格,同样,第四个也是,第五个不会被计数,因为它前后都没有空格,最后两个将被计数,因为它们前后都有空格。

function countOccurences(str,word){
       var regex = new RegExp("(\\b|(?<=_))"+word+"(\\b|(?<=_))","gi");
       console.log((str.match(regex)|| []).length);
    }

我编写的函数计算确切的单词数,但不考虑空格,所以我得到的输出为7,但我想要得到的是5。
1个回答

1
您可以尝试在此处使用match()函数:

var sample = " test-abc -test# @test _test hello-test@ test test ";
var matches = sample.match(/(?<=\s)test|test(?=\s)/g, sample);
console.log("There were " + matches.length + " matches of test with whitespace on one side");

这里使用的正则表达式模式表示要匹配:
(?<=\s)test  test preceded by whitespace
|            OR
test(?=\s)   test followed by whitespace

请注意这里的5个匹配项是:
test-abc
@test
_test
test
test

如何获取前后都有空格的最后两个字符? - souv21
var sample = " test-abc -test# @test _test hello-test@ test test "; var asset = "test"; var regex = new RegExp("(?<=\\s)" + asset + "|" + asset + "(?=\\s)", "g"); 这种方式可行吗? - souv21
1
如果你想使用 RegExp,我认为你需要进行双重转义,因此请使用:var regex = new RegExp("(?<=\\s)"+asset+"|"+asset+"(?=\\s)", "g"); - Tim Biegeleisen
1
@souv21 匹配条件:/(?<=\s)test(?=[\W_])|(?<=[\W_])test(?=\s)/g - Tim Biegeleisen
1
谢谢,现在精确匹配已经可以工作了。 - souv21
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接