Javascript find index of word in string (not part of word)
-
05-07-2021 - |
Question
I am currently using str.indexOf("word")
to find a word in a string.
But the problem is that it is also returning parts of other words.
Example: "I went to the foobar and ordered foo." I want the first index of the single word "foo", not not the foo within foobar.
I can not search for "foo " because sometimes it might be followed by a full-stop or comma (any non-alphanumeric character).
La solution
You'll have to use regex for this:
> '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/
matches foo
that is surrounded by word boundaries.
To match an arbitrary word, construct a RegExp
object:
> var word = 'foo';
> var regex = new RegExp('\\b' + word + '\\b');
> 'I went to the foobar and ordered foo.'.search(regex);
33
Autres conseils
For a general case, use the RegExp constrcutor to create the regular expression bounded by word boundaries:
function matchWord(s, word) {
var re = new RegExp( '\\b' + word + '\\b');
return s.match(re);
}
Note that hyphens are considered word boundaries, so sun-dried is two words.
I have tried both with ".search" and ".match", as suggested in the previous answers, but only this solution worked for me.
var str = 'Lorem Ipsum Docet';
var kw = 'IPSUM';
var res = new RegExp('\\b('+kw+')\\b','i').test(str);
console.log(res); // true (...or false)
With the 'i' for case insensitive search.