Javascript находит индекс слова в строке (не является частью слова)
В настоящее время я использую str.indexOf("word")
, чтобы найти слово в строке.
Но проблема в том, что она также возвращает части других слов.
Пример: "Я пошел к фобару и приказал foo".
Я хочу первый индекс одного слова "foo", а не foo внутри foobar.
Я не могу найти "foo", потому что иногда за ним может следовать полная остановка или запятая (любой символ, отличный от алфавитно-цифрового).
Ответы
Ответ 1
Для этого вам нужно использовать регулярное выражение:
> 'I went to the foobar and ordered foo.'.indexOf('foo')
14
> 'I went to the foobar and ordered foo.'.search(/\bfoo\b/)
33
/\bfoo\b/
соответствует foo
, который окружен границами слов.
Чтобы соответствовать произвольному слову, постройте объект RegExp
:
> var word = 'foo';
> var regex = new RegExp('\\b' + word + '\\b');
> 'I went to the foobar and ordered foo.'.search(regex);
33
Ответ 2
В общем случае используйте RegExp constrcutor для создания регулярного выражения, ограниченного границами слов:
function matchWord(s, word) {
var re = new RegExp( '\\b' + word + '\\b');
return s.match(re);
}
Обратите внимание, что дефисы считаются границами слов, поэтому высушенные на солнце два слова.