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).
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
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.