Заставьте str.index () соответствовать только целым словам - PullRequest
1 голос
/ 04 января 2012

Я хочу сопоставить целые слова, используя функцию JS "index ()"

Я хочу вернуть -1 на это:

var str="hello I am a string";

alert(str.index("str")); //it matches because of STRing, but don't want

Редактировать: Но я строго хочу сопоставлять «str» только тогда, когда оно кажется окруженным двумя пробелами (но также совпадает, когда оно находится в начале / конце предложения). Так что \b не работает для меня, потому что я НЕ хочу, чтобы "hello I am str. how are you?" соответствовал

Ответы [ 4 ]

3 голосов
/ 04 января 2012

Вы можете использовать слово, которое вы хотите найти, и поставить (^|\s) с одной стороны, что означает либо начало строки, либо пробел, либо ($|\s) с правой стороны, что означает конец строка или пробельный символ:

var str = "hello I am a string";

alert(str.search(/(^|\s)str($|\s)/)); // alerts -1
alert(str.search(/(^|\s)string($|\s)/)); // alerts 12
1 голос
/ 04 января 2012

Может быть, это будет работать:

(^|\s)str(\s|$)
0 голосов
/ 04 января 2012

Я думаю, это то, что вы ищете:

alert(str.search("(^|\\s|\\W\\s)str($|\\W$|\\s|\\W\\s)"));

Это соответствует "str" ​​как отдельному слову в начале, конце или где-то в середине строки. За пунктуацией до или после "str" ​​должен следовать либо хотя бы один символ пробела, либо конец строки. Таким образом, «str» может начинать или заканчивать предложение («str. Ing»), но «str.ing» не будет совпадать.

0 голосов
/ 04 января 2012

Помимо описанных выше методов поиска, я также видел добавление пробелов для этого точного теста. Я видел это при тестировании, имеет ли элемент определенный класс.

var str = "hello I am a string"

(" " + str + " ").index(" str ");

Ваш индекс будет отключен на единицу, но если вы собираетесь на существование (а не на позицию), это сработает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...