如何用正则统计JS字符串中前后至少一侧带空格的指定单词次数
问题解决思路
你原来的正则使用单词边界\b匹配,会把符号、下划线前后的test都判定为单词边界命中,所以出现多余匹配结果。调整方案的核心是直接用空格/字符串首尾的环视判断来匹配符合规则的目标单词。
调整后的实现代码
function countOccurences(str, word) { // 先转义word中的正则特殊字符,避免特殊字符引发匹配错误 const escapedWord = word.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') // 正则逻辑:匹配「前面是空格/开头」或「后面是空格/结尾」的目标单词 const regex = new RegExp(`(?<=\\s|^)${escapedWord}|${escapedWord}(?=\\s|$)`, 'gi') return (str.match(regex) || []).length } // 测试用例 var sample = " test-abc -test# @test _test hello-test@ test test " console.log(countOccurences(sample, 'test')) // 输出5,符合预期
正则逻辑说明
(?<=\\s|^):反向环视,判定目标单词前面是空格,或者是字符串开头位置(?=\\s|$):正向环视,判定目标单词后面是空格,或者是字符串结尾位置- 两个分支用
|连接,只要满足其中一个条件就命中匹配,完全符合你要求的「前带空格/后带空格/前后都带空格」的统计规则
内容的提问来源于stack exchange,提问作者souv21
相关产品推荐
相关产品推荐

