用于匹配单词的 javascript 正则表达式模式,具有自定义单词边界

Posted

技术标签:

【中文标题】用于匹配单词的 javascript 正则表达式模式,具有自定义单词边界【英文标题】:javascript regex pattern to match words, with custom word boundary 【发布时间】:2014-09-29 09:04:53 【问题描述】:

我正在尝试使用 javascript 中的正则表达式匹配字符串中的单词。

假设字符串是“我有 C++ 作为一项技能”。我现在想计算“c++”子字符串的出现次数。如果字符串是“我有 c++test”或类似的,我不想匹配。所以我需要检查单词边界并包含一些特殊字符,例如 + 和 #。

我有以下代码:

var str = "I have c++ as a skill, but I do not have c++test as a skill";

var regex = new RegExp("(?<![\\w+#])c\\+\\+(?![\\w+#])", "g");

count = (str.match(regex) || []).length; 

console.log(count); 

预期结果是“1”。

这在 var regex... 行失败,错误为:

SyntaxError: Invalid regular expression: /(?<![\w+#])c\+\+(?![\w+#])/: Invalid group 

我看不到需要更改哪些内容才能使我的边界正常工作,有人可以帮助我吗?

【问题讨论】:

你可以使用正则表达式,它们更容易阅读,因为它们不需要双重转义:/(?&lt;![\w+#])c\+\+(?![\w+#])/ 在 JS 中:Lookbehind is not supported at all. Lookahead is fully supported. 如果我是你,我会使用:\sc\\+\\+\s 【参考方案1】:

尝试类似:

var regex = new RegExp("([^\\w#]|^)c\\+\\+(?=[^\\w#]|$)", "g");

【讨论】:

非常接近,我的问题可能含糊不清,但我需要检查单词边界以及空格。这不会匹配 str = "c++ c++" as 2,只有 1。

以上是关于用于匹配单词的 javascript 正则表达式模式,具有自定义单词边界的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript正则表达式匹配不区分大小写的单词? [复制]

用于匹配单词的正则表达式,除非前一行以单词结尾

JavaScript正则表达式二

JavaScript正则表达式

如果正则表达式不包含特定单词,如何匹配它?

正则表达式——7.4 单词边界