7

多数のキャプチャ グループがある場合、RegExpどのグループがキャプチャを行ったか (複数ある場合は少なくとも最初/最後のグループ) を知りたいと考えています。Python に精通している場合、これは基本的にre.MatchObject.lastgroup. より明確にするためのいくつかのコード:

var re_captures = new RegExp("(\\d+)|(for)|(\\w+)", "g");
var str = " for me 20 boxes please";
var result;

while ((result = re_captures.exec(str)) !== null) {
  console.log(result[0], 'at', result.index, result.slice(1));
}

それは印刷します:

for at 1 [ undefined, 'for', undefined ]
me at 5 [ undefined, undefined, 'me' ]
20 at 8 [ '20', undefined, undefined ]
boxes at 11 [ undefined, undefined, 'boxes' ]
please at 17 [ undefined, undefined, 'please' ]

配列は、どのグループがキャプチャしたかを示していますが、特定の一致ごとに、配列を反復処理せずresultにどのグループが一致したかをすばやく見つける方法はありません。これは、大きな正規表現がプログラムによって構築され、反復が非効率的な場合に役立ちます。

明らかな何かが欠けていますか、それとも可能ではありませんか?

4

1 に答える 1

3

あなたは何も見逃していません。配列を反復処理することが唯一の方法です。

マッチを反復することが実際にパフォーマンスの問題になるグループはいくつありますか? グループが必要ない場合は、いつでも非キャプチャにすることができますが…</p>

于 2013-06-17T14:30:24.307 に答える