使用javaScript查找字符串中每个重复单词出现的起始索引的最佳方法

时间:2013-08-17 19:53:21

标签: javascript

findIndexes(s,kw)应该找到字符串中每个匹配项(kw)出现的起始索引。

function findIndexes(s,kw){
    var result = [];
    s = " " + s.toLowerCase() + " ";
    kw = " " + kw.toLowerCase() + " ";  
    var i = s.indexOf(kw);

    while (i >= 0){
        result.push(i);
        i = s.indexOf(kw, i+kw.length);
    };

    console.log("The index of " + kw +":");
    for (var i =0; i < result.length; i++)
    console.log(result[i]);
}

findIndexes("Apple PEAR banana pineapple STRAWBERRY appLE CrabApple ApPle","apple");
// returns 0, 39, 55

这是我能使它工作的最好但我不喜欢我必须在字符串集(s = " " + s.toLowerCase() + " "; kw = " " + kw.toLowerCase() + " ";)之前和之后放置空格以排除那些包含搜索词的单词(菠萝,等等。 ..)。我尝试使用RegExp(kw = new RegExp('\\b' + kw + '\\b');但是它不起作用。如果你能提出更好的解决方案,我将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:1)

您可以使用String.prototype.split将字符串拆分为" "并以这种方式获取字词,然后根据您要查找的字符检查元素。

function getIndexes (str,key) {
  var up="toUpperCase",result = [];
      str=str.split (" ");
      str.unshift(0);      
  str.reduce (function (index,word) {
    if (key[up]() === word[up]())
      result.push(index);
    return index + word.length + 1;
  });
  return result;
}

console.log (
  getIndexes (
  "Apple PEAR banana pineapple STRAWBERRY appLE CrabApple ApPle","apple"
  )
); //[0, 39, 55] 

这是Fiddle

答案 1 :(得分:0)

indexOf method不能与正则表达式一起使用,您需要使用search method来查找匹配索引。但是,要进行多项匹配,您需要exec正则表达式:

function findIndexes(s,kw){
    var result = [],
        kw = new RegExp('\\b' + kw + '\\b', 'ig'),
//         case insensitive and global flags ^^
        r;
    while (r = kw.exec(s)) {
        result.push(r.index);
    }

    console.log.apply(console, result);
    return result;
}