2014-09-29 2 views
0

Я пытаюсь совместить слова в строке с использованием регулярного выражения в javascript.javascript regex pattern для соответствия словам, с пользовательской границей слов

Допустим, что строка «У меня есть 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".

Это происходит сбой на линии вар регулярное выражение ... с ошибкой:

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

я не понимаю, что мне нужно изменить, чтобы сделать свою работу граничное, кто может мне помочь?

+1

Вы можете использовать Regex литералов, их легче читать, потому что они не нуждаются в двойной вытекание: (? MarioDS

+1

В JS:' Lookbehind не поддерживается вообще. Lookahead полностью поддерживается. ' – Krzysiek

+0

Если бы я был вами, я бы использовал: \ sc \\ + \\ + \ s –

ответ

2

Попробуйте что-то вроде:

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

Очень близко, я, возможно, был расплывчатым по моему вопросу, но мне нужно проверить границы слов, а также как пробел. Это не будет соответствовать str = "C++ C++" как 2, только 1. –

+0

Lookahead полностью поддерживается. Ответ обновлен. – Krzysiek

+0

Спасибо, работает как шарм. –

Смежные вопросы