私のRegExp
には多数のキャプチャグループがありますが、キャプチャを行ったグループ(複数ある場合は最初または最後のグループ)を知りたいと思います。あなたがPythonをよく知っているなら、これは基本的にre.MatchObject.lastgroup
に相当します。それをより明確にするためにいくつかのコード:RegExp検索で一致するグループを効率的に見つける
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
配列ショー配列を反復することなく一致した。これは、大規模な正規表現がプログラムで構築され、反復処理が非効率的である場合に便利です。
明白なものがないか、それは可能ではありませんか?
私はそれは可能ではないと思います。しかし、これが非効率になったとき、あなたは正確に何をしていますか?大規模な正規表現より大きな解決策があるかもしれません。 – Bergi
@Bergi:私の使い方は、下のminitechの答えについた長いコメントを参照してください。 –
私はこれが不正行為だと知っていますが、明示的な反復を避けるために 'indexOf'を使うことができます。確かに、エンジンは内部的に反復するでしょう – user123444555621