2014-09-29 51 views
0

我想在JavaScript中使用正则表达式匹配字符串中的单词。javascript正则表达式匹配单词,与自定义词边界

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

我有以下代码:

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正则表达式...出现错误:

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

我看不出什么,我需要改变,以使我的边界工作,谁能帮助我?

+1

您可以使用正则表达式文字,他们更容易阅读,因为他们并不需要双转义:(?<![\ w +#])'/ C \ + \ +(?![\ w +#])/' – MarioDS 2014-09-29 09:07:22

+1

在JS中:'Lookbehind根本不被支持。 Lookahead is fully supported.' – Krzysiek 2014-09-29 09:09:02

+0

如果我是你,我会用:\ sc \\ + \\ + \ s – 2014-09-29 09:10:11

回答

2

试着这么做:

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

非常接近,我可能对我的问题含糊不清,但我还需要检查字边界作为空白。这将不匹配str =“C++ C++”作为2,仅为1. – 2014-09-29 09:47:13

+0

Lookahead完全受支持。答案已更新。 – Krzysiek 2014-09-29 10:02:04

+0

谢谢,像魅力一样工作。 – 2014-09-29 10:09:51

相关问题