我目前正在使用str.indexOf("word")
来查找字符串中的单词。
但问题在于它还会返回其他词语。
示例:“我去了foobar并订购了foo。” 我想要单词“foo”的第一个索引,而不是foobar中的foo。
我无法搜索“foo”,因为有时它可能会跟随一个句号或逗号(任何非字母数字字符)。
答案 0 :(得分:19)
你必须使用正则表达式:
> '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
答案 1 :(得分:3)
对于一般情况,使用RegExp constrcutor创建由单词边界限定的正则表达式:
function matchWord(s, word) {
var re = new RegExp( '\\b' + word + '\\b');
return s.match(re);
}
请注意,连字符被视为字边界,因此晒干是两个字。
答案 2 :(得分:0)