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);
}

Обратите внимание, что дефисы считаются границами слов, поэтому высушенные на солнце два слова.