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() + " ";これは私がそれを機能させることができる最高のものですが、検索語 (pineapple,ect...) を含む単語を除外するために、両方の文字列セット ( ) の前後にスペースを入れる必要があるのは好きではありません。私は使用しようとしました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 に答える