2014-09-29 73 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

相關問題