3

次の文字列があります。

[a] [abc] test [zzzz]

私は次のような配列を取得しようとしています:

[0] => a
[1] => abc
[2] => zzzz

私は次のコードを試しました:

var string = '[a] [abc] test [zzzz]';
var matches = string.match(/\[(.*?)\]/g);
for(var i = 0; i < matches.length; i++)
    console.log(matches[i]);

しかし、私のコンソール出力は次のとおりです。

[a]
[abc]
[zzzz]

次のように、2 つの非キャプチャ グループ ( ?:)を追加してみました。

var matches = string.match(/(?:\[)(.*?)(?:\])/g);

しかし、変更されていない同じ一致が表示されます。

何が問題なのですか?どうすれば必要な配列を取得できますか?

4

2 に答える 2

3

matchグローバルマッチでグループをキャプチャしません。私はまさにこの目的のために小さなヘルパーを作りました。

String.prototype.gmatch = function(regex) {
  var result = [];
  this.replace(regex, function() {
    var matches = [].slice.call(arguments,1,-2);
    result.push.apply(result, matches);
  });
  return result;
};

そして、次のように使用します。

var matches = string.gmatch(/\[(.*?)\])/g);
于 2013-05-19T04:01:02.877 に答える