ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript Regex が繰り返しの最後のグループのみをキャプチャするのはなぜですか?

JavaScript Regex が繰り返しの最後のグループのみをキャプチャするのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-11 04:12:02219ブラウズ

Why Does JavaScript Regex Capture Only the Last Group in a Repetition?

JavaScript 正規表現での複数のグループのキャプチャ

JavaScript で正規表現を使用する場合、複数のグループをキャプチャする必要がある状況がよく発生します。データのグループ。ただし、場合によっては、一致したすべてのグループをキャプチャするという期待どおりの動作が達成されないことがあります。

たとえば、次の JavaScript コードを考えてみましょう。

"foo bar baz".match(/^(\s*\w+)+$/)

このコードは次の結果を返すと予想されるかもしれません。キャプチャされたすべての一致を含む配列:

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

ただし、実際の結果is:

["foo bar baz", " baz"]

これは、正規表現でキャプチャ グループを繰り返すと、最後のキャプチャのみが保持されるために発生します。これは、ほとんどの正規表現のデフォルトの動作です。

すべての一致をキャプチャするための回避策

一致したグループをすべてキャプチャする必要がある場合は、いくつかのオプションを使用できます。 :

  • 区切り文字で分割:照合しようとしているパターンに区切り文字が含まれている場合は、正規表現の代わりに分割メソッドを使用することを検討してください。この方法は、入力文字列を文字列の配列に分割するために使用できます。
  • ループを使用したマッチング: ループを使用して、入力文字列に正規表現を繰り返し適用できます。実行メソッド。このメソッドは、一致ごとにキャプチャされたグループをすべて含む配列を返します。
  • マルチレベル マッチング: 別のアプローチでは、1 つの一致で繰り返されるグループをキャプチャし、2 番目の正規表現を使用してそれを破ります。

実行ループを使用した例

以下は例は、実行ループを使用して複数のグループを照合する方法を示しています:

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) {
  console.log(match[1].split(";"));
}
// [ 'c', 'd', 'e', 'f' ]
// [ 'xx', 'yy', 'zz' ]

追加リソース

  • 正規表現.info/キャプチャ グループの繰り返しと繰り返しのキャプチャGroup
  • JavaScript で一致したグループにアクセスするにはどうすればよいですか正規表現?

以上がJavaScript Regex が繰り返しの最後のグループのみをキャプチャするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。