Javascript在字符串中找到单词的索引(不是单词的一部分)

时间:2012-10-08 00:04:02

标签: javascript regex search indexof text-search

我目前正在使用str.indexOf("word")来查找字符串中的单词。 但问题在于它还会返回其他词语。

示例:“我去了foobar并订购了foo。” 我想要单词“foo”的第一个索引,而不是foobar中的foo。

我无法搜索“foo”,因为有时它可能会跟随一个句号或逗号(任何非字母数字字符)。

3 个答案:

答案 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)

正如先前答案中所建议的,我已经尝试过使用“ .search”和“ .match”进行尝试,但是只有这种解决方案对我有用。

var str = 'Lorem Ipsum Docet';
var kw  = 'IPSUM';
var res = new RegExp('\\b('+kw+')\\b','i').test(str);

console.log(res); // true (...or false)

使用“ i”表示不区分大小写的搜索。

ComFreek写了详细的答案here