我目前正在使用 str.indexOf("word")
来查找字符串中的单词。但问题是它也会返回其他单词的一部分。
例如:"我去了foobar并点了foo。" 我想要单词 "foo" 的第一个索引,而不是 foobar 中的 "foo"
我不能搜索 "foo ",因为有时它可能会跟随着句号或逗号 (任何非字母数字字符)。
我目前正在使用 str.indexOf("word")
来查找字符串中的单词。但问题是它也会返回其他单词的一部分。
例如:"我去了foobar并点了foo。" 我想要单词 "foo" 的第一个索引,而不是 foobar 中的 "foo"
我不能搜索 "foo ",因为有时它可能会跟随着句号或逗号 (任何非字母数字字符)。
你需要使用正则表达式来解决这个问题:
> '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
re.escape()
一样的等价物,所以点号不被当作字面上的点号对待。 - Blender\\b
边界不适用于非英语但完全是字母数字字符,例如à、é、ö。 new RegExp("\\bestá\\b").test('¿dónde está la alcaldesa?')
返回False
,但有趣的是new RegExp("\\bdónde\\b").test('¿dónde está la alcaldesa?')
返回True。 - user3871对于一般情况,使用RegExp构造函数创建由单词边界限定的正则表达式:
function matchWord(s, word) {
var re = new RegExp( '\\b' + word + '\\b');
return s.match(re);
}