3

どして

"$1 $2 $3".match(/\$(\d+)/g)

戻る

 ["$1", "$2", "$2"]

、 いいえ

 ["1", "2", "3"]

グローバルフラグを削除すると、一致とキャプチャされた一致が表示されます。

["$1", "1"]

しかし、1つだけです。

私にこれを与えないように正規表現キャプチャを行う方法はありますか?

$の周りにキャプチャされていない括弧を入れても、同じ結果が得られます。例:

"$1 $2 $3".match(/(?:\$)(\d+)/g)
4

1 に答える 1

6

正規表現でキャプチャグループ(例:parens)を使用する場合、関数は2次元のデータ(キャプチャグループのリスト)を返すことができないgため、フラグを使用して複数の一致を取得することはできません。.match()一致するたびに)。それを行うように設計されている可能性がありますが、そうではありませんでした。その情報を取得するには、ループして.exec()複数回呼び出す必要があり、呼び出すたびに連続する各一致からすべてのデータを取得します。

を使用してこのデータを取得するには、.exec()次のようになります。

var str = "$1 $2 $3", matches;
var allMatches = [];
var reg = /\$(\d+)/g;

while (matches = reg.exec(str)) {
    // matches[1] is each successive match here from your captured group
    allMatches.push(matches[1]);
}
// allMatches will be what you wanted ["1", "2", "3"]
于 2012-09-21T14:45:39.000 に答える