「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > 繰り返される JavaScript Regex で複数のグループをキャプチャするにはどうすればよいですか?

繰り返される JavaScript Regex で複数のグループをキャプチャするにはどうすればよいですか?

2024 年 11 月 26 日に公開
ブラウズ:836

How to Capture Multiple Groups in a Repeated JavaScript Regex?

JavaScript 正規表現での任意のグループのキャプチャ

JavaScript 正規表現でグループのキャプチャを使用する場合は、制限を理解することが重要です。デフォルトでは、グループがネストされている場合でも、繰り返しグループの最後のキャプチャのみが保持されます。

例: ネストされたキャプチャ グループ

次の正規表現を考えてみましょう。

/^(\s*\w ) $/

期待値出力:

["foo bar baz", "foo", " bar", " baz"]

実際の出力:

["foo bar baz", " baz"]

この場合、最後にキャプチャされたグループ「 baz」のみが返されます。これは、JavaScript が繰り返される各グループの最終キャプチャのみを保持するためです。

複数のグループをキャプチャするオプション

この制限を克服するために、いくつかのオプションが利用可能です:

  • 区切り文字で分割: 可能であれば、文字列分割を使用して目的の文字列を区切ります。セグメント。
  • 実行ループと分割: 実行ループを使用して文字列内のパターンを繰り返し照合し、キャプチャされたグループを個別の一致に分割します。
  • マルチレベルMatching: 1 つの一致で繰り返されるグループをキャプチャし、別の正規表現を使用して個別を抽出します。セグメント.

例: 実行ループと分割

次に、実行ループを使用してネストされたグループをキャプチャおよび分割する例を示します。

var text = "a;b;<c;d;e;f>;g;h;i;<no no no>;j;k;<xx;yy;zz>";
var r = /<(\w (;\w )*)>/g;
var match;

while ((match = r.exec(text)) != null) {
  print(match[1].split(";"));
}

// Output:
// ["c", "d", "e", "f"]
// ["xx", "yy", "zz"]

この例では、ネストされたグループはグループ 1 としてキャプチャされ、セミコロン区切り文字で分割されます。

関連する質問

  • JavaScript で一致したグループにアクセスするにはどうすればよいですか正規表現?
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3