以前、正規表現については比較的よく理解できたつもりで記事を書きましたが、今日は JavaScript についての共有に焦点を当てます。式のグループ化。 JS 正規表現について十分に理解していない場合は、ここをクリックして詳細を確認してください。
グループ化は、正規表現で広く使用されています。私が理解しているグループ化は、括弧 () のペアです。
グループ化は、次のように分類できます。
グループ化のキャプチャグループ化のキャプチャでは、match exec などの関数の 2 番目と 3 番目の項目の形式で、対応するグループ化の結果を取得します。まず例を見てみましょう
var reg = /test(\d+)/; var str = 'new test001 test002'; console.log(str.match(reg)); //["test001", "001", index: 4, input: "new test001 test002"]
ただし、グループマッチングとは、完全一致結果全体 (つまり、test001) からサブパターン d+ に一致する文字を見つけることです。これは明らかに 001 です。
しかし、今日遭遇した状況は次のようなものです
var reg = /test(\d)+/; var str = 'new test001 test002'; console.log(str.match(reg)); //["test001", "1", index: 4, input: "new test001 test002"]
それらの違いをゆっくり分析してみましょう
(d+) これはグループ化の状況です。デフォルトではマッチングモードが貪欲モードであるため、これはできるだけ多くのマッチングを意味します
すべての d+ マッチング結果は 001 で、次に のペアです括弧はグループの外側に追加されるため、最初のグループのマッチング結果は 001 になります。
2 番目の例の (d)+ を見てみましょう。これも貪欲モードであり、最初に 0 がマッチングされ、次に 0 がマッチングされます。 0 まで、最後の 1 まで一致し、一致の最後まで一致します
最初の例の一致と変わらないようですが、ここでのグループ化 (d) は単一の一致を意味します。番号、
私の以前の理解によれば、最初の一致結果である 0 と一致しますが、この理解は間違っています。マッチング全体が貪欲モードであるため、グループ内でできるだけ多くのマッチング
(d)を行うと、最後に一致した結果1がキャプチャされます
非貪欲モードの場合は、可能な限り少数のマッチングになります
var reg = /test(\d)+?/; var str = 'new test001 test002'; console.log(str.match(reg)); //["test001", "0", index: 4, input: "new test001 test002"]
var reg = /test(?:\d)+/; var str = 'new test001 test002'; console.log(str.match(reg)); //["test001", index: 4, input: "new test001 test002"]