JavaScript 正規表現での複数のグループのキャプチャ
JavaScript で正規表現を使用する場合、複数のグループをキャプチャする必要がある状況がよく発生します。データのグループ。ただし、場合によっては、一致したすべてのグループをキャプチャするという期待どおりの動作が達成されないことがあります。
たとえば、次の JavaScript コードを考えてみましょう。
"foo bar baz".match(/^(\s*\w+)+$/)
このコードは次の結果を返すと予想されるかもしれません。キャプチャされたすべての一致を含む配列:
["foo bar baz", "foo", " bar", " baz"]
ただし、実際の結果is:
["foo bar baz", " baz"]
これは、正規表現でキャプチャ グループを繰り返すと、最後のキャプチャのみが保持されるために発生します。これは、ほとんどの正規表現のデフォルトの動作です。
すべての一致をキャプチャするための回避策
一致したグループをすべてキャプチャする必要がある場合は、いくつかのオプションを使用できます。 :
実行ループを使用した例
以下は例は、実行ループを使用して複数のグループを照合する方法を示しています:
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' ]
追加リソース
以上がJavaScript Regex が繰り返しの最後のグループのみをキャプチャするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。