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

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

Mary-Kate Olsen
リリース: 2024-11-11 04:12:02
オリジナル
302 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート