我目前正在使用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
对于一般情况,使用 RegExp 构造函数创建以单词边界为界的正则表达式:
function matchWord(s, word) {
var re = new RegExp( '\\b' + word + '\\b');
return s.match(re);
}
请注意,连字符被视为单词边界,因此 sun-dried 是两个单词。