JavaScript Regex での任意のグループのキャプチャ
正規表現を使用してグループをキャプチャする場合、特定のパターンによって課される制限を理解することが重要です。繰り返しキャプチャ グループを使用して複数の出現を一致させることはできますが、JavaScript では最後のキャプチャのみが保持されます。
次の例を考えてみましょう。
"foo bar baz".match(/^(\s*\w+)+$/)
このパターンでは、キャプチャ グループ (s *w ) は量指定子を使用して繰り返されます。ただし、JavaScript の正規表現エンジンは、中間の一致ではなく、最後の出現のみをキャプチャします。その結果、出力は次のようになります:
["foo bar baz", " baz"]
キャプチャされた一致をすべて取得するには、次の戦略を検討してください:
区切り文字で分割:
可能であれば、複雑な正規表現を使用するのではなく、事前定義された区切り文字で文字列を分割します。
繰り返しグループを使用した実行ループ:
繰り返しグループをキャプチャするパターンを作成し、実行ループを使用して一致を繰り返します。完全なグループを取得したら、内側の区切り文字で分割します。
マルチレベル マッチング:
繰り返されるグループを 1 つのパターンで取得し、次を使用することで問題を複数の段階に分割します。個々の一致を抽出する後続のパターン。
例:
文字列
/<(\w+(;\w+)*)>/g
このパターンは、グループ 1 の繰り返しグループ全体をキャプチャします。次に、実行ループで、; を使用してキャプチャされた文字列を分割します。区切り文字。
var text = "a;b;;g;h;i; ;j;k; "; var r = /<(\w+(;\w+)*)>/g; var match; while ((match = r.exec(text)) != null) { console.log(match[1].split(";")); }
出力:
["c", "d", "e", "f"] ["xx", "yy", "zz"]
以上がJavaScript 正規表現でグループの複数の出現をキャプチャする方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。