ホームページ  >  記事  >  ウェブフロントエンド  >  繰り返しによって最後の一致のみが保持される場合、JavaScript 正規表現で複数のグループをどのようにキャプチャできるでしょうか?

繰り返しによって最後の一致のみが保持される場合、JavaScript 正規表現で複数のグループをどのようにキャプチャできるでしょうか?

DDD
DDDオリジナル
2024-11-16 22:40:03650ブラウズ

How can you capture multiple groups in a JavaScript regexp when the repetition only keeps the last match?

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

JavaScript で正規表現を使用する場合、文字列内の一致の複数のグループをキャプチャできます。 。ただし、キャプチャおよび取得できるグループの数には制限があります。

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

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

この正規表現は、全体を含む配列を返すことが期待されるかもしれません。文字列 "foo bar baz" と個々の単語:

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

ただし、正規表現は実際には最後の単語のみを返します。キャプチャされた一致:

["foo bar baz", " baz"]

この動作は、ほとんどの正規表現では、繰り返されたキャプチャ グループの最後のキャプチャのみが保持されるために発生します。 JavaScript では、キャプチャ グループを繰り返すと、一致ごとに指定された数の文字列のみをキャプチャできます。

この制限を克服するには、いくつかのオプションがあります。

  • 区切り文字での分割: 可能であれば、キャプチャを繰り返す正規表現を使用する代わりに、適切な区切り文字で文字列を分割することを検討してください。
  • グローバル実行ループの使用: /pattern/g フラグを使用して 1 つの一致で繰り返されるグループを照合し、実行ループを使用して結果を処理します。このメソッドは、繰り返しキャプチャ グループと完全に同等ではないことに注意してください。
  • マルチレベル マッチング: 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) {
  print(match[1].split(";"));
}

このアプローチでは、2 つのレベルのマッチングを使用して文字列から個々の単語を抽出します。

以上が繰り返しによって最後の一致のみが保持される場合、JavaScript 正規表現で複数のグループをどのようにキャプチャできるでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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