15

こんにちは、文字列が別の文字列内に存在するかどうかを検索するために indexOf メソッドを使用しています。しかし、文字列がどこにあるかのすべての場所を取得したいですか? 文字列が存在するすべての場所を取得する方法はありますか?

<html>
<head>
    <script type="text/javascript">
        function clik()
        {
            var x='hit';
            //document.getElementById('hideme').value ='';
            document.getElementById('hideme').value += x;
            alert(document.getElementById('hideme').value);
        }

        function getIndex()
        {
            var z =document.getElementById('hideme').value;
            alert(z.indexOf('hit'));
        }
    </script>
</head>
<body>
    <input type='hidden' id='hideme' value=""/>
    <input type='button' id='butt1' value="click click" onClick="clik()"/>
    <input type='button' id='butt2' value="clck clck" onClick="getIndex()"/>
</body>
</html>

すべての位置を取得する方法はありますか?

4

5 に答える 5

36

次のようなものを試してください:

var regexp = /abc/g;
var foo = "abc1, abc2, abc3, zxy, abc4";
var match, matches = [];

while ((match = regexp.exec(foo)) != null) {
  matches.push(match.index);
}

console.log(matches);
于 2010-07-29T18:56:53.590 に答える
1

それを行うための組み込み関数があるかどうかはわかりません。ただし、単純なループで実行できます。

function allIndexes(lookIn, lookFor) {
    var indices = new Array();
    var index = 0;
    var i = 0;
    while(index = lookIn.indexOf(lookFor, index) > 0) {
        indices[i] = index;
        i++;
    }
    return indices;
}
于 2010-07-29T18:47:24.160 に答える
0

これを行う正規表現の方法は次のとおりです。

function positions(str, text) {
  var pos = [], regex = new RegExp("(.*?)" + str, "g"), prev = 0;
  text.replace(regex, function(_, s) {
    var p = s.length + prev;
    pos.push(p);
    prev = p + str.length;
  });
  return pos;
}
于 2010-07-29T18:57:48.480 に答える
0

indexOf('searchstring', ) を使用して、「前回のラウンド」で返されたインデックス + 1 を使用して、-1 が返されるまで使用できます。

于 2010-07-29T18:48:07.523 に答える