1

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');但它不起作用。如果您能提出更好的解决方案,我将不胜感激。谢谢!

4

2 回答 2

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] 

这是一个小提琴

于 2013-08-17T21:18:23.447 回答
0

indexOf方法不适用于正则表达式,您需要使用该search方法查找匹配索引。但是,要进行多个匹配,您需要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;
}
于 2013-08-17T20:11:14.203 回答