[解決済み] JavaScript Regexpで任意の数のグループを捕捉する方法は?
2023-03-12 01:09:20
質問
私は、このJavaScriptの行を期待しています。
"foo bar baz".match(/^(\s*\w+)+$/)
のようなものを返すようにします。
["foo bar baz", "foo", " bar", " baz"]
の代わりに、最後に捕捉されたマッチだけを返します。
["foo bar baz", " baz"]
キャプチャしたマッチをすべて取得する方法はありますか?
どのように解決するのですか?
キャプチャグループを繰り返すと、ほとんどのフレーバーで、最後のキャプチャのみが保持され、以前のキャプチャは上書きされます。.NETなどのいくつかのフレーバーでは、すべての中間キャプチャを取得することができますが、これはJavascriptの場合ではありません。
つまり、Javascriptでは、パターンが N のキャプチャグループがある場合、キャプチャできるのは正確に N の文字列しか捕捉できません。
ですから、一般的には、必要なものによって
- オプションであれば、代わりに区切り文字で分割する
-
マッチングする代わりに
/(pattern)+/
をマッチさせるのではなく、多分/pattern/g
で、おそらくexec
ループ- この2つは全く同じものではありませんが、選択肢の1つです。
-
多段階のマッチングを行う。
- 繰り返されるグループを1回のマッチングで捕捉する
- 次に別の正規表現を実行して、そのマッチを分割する
参考文献
例
以下は、マッチングの例です。
<some;words;here>
を使用した例です。
exec
ループを使用し、さらに
;
で分割し、個々の単語 (
ideone.comの記事も参照してください。
):
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(";"));
}
// c,d,e,f
// xx,yy,zz
使用されているパターンは
_2__
/ \
<(\w+(;\w+)*)>
\__________/
1
これは
<word>
,
<word;another>
,
<word;another;please>
など。グループ2は、任意の数の単語をキャプチャするために繰り返されますが、それは最後のキャプチャを保持することができるのみです。単語のリスト全体がグループ1によって捕捉される。この文字列は次に
split
のようにセミコロンで区切られる。
関連する質問
関連
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] JavaScriptでメールアドレスを検証するのに最適な方法は何ですか?
-
[解決済み] JavaScriptでカンマを桁区切りにして数値を表示する方法
-
[解決済み] JavaScriptでドロップダウンリストの選択値を取得する
-
[解決済み] JavaScriptの正規表現でマッチしたグループにアクセスするにはどうすればよいですか?
-
[解決済み] JavaScriptで、ある文字列が別の文字列の中に出現するすべてのインデックスを見つけるにはどうすればよいですか?
-
[解決済み] 無効になっている入力フィールドの値を送信する
-
[解決済み] Javascript の parseInt() で先頭のゼロを削除する。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] JavaScriptの正規表現でマッチしたグループにアクセスするにはどうすればよいですか?
-
[解決済み] 文字列のn番目の出現箇所を取得するには?
-
[解決済み] URL/アドレスバーからJavascriptの関数を呼び出す
-
[解決済み] TypeScriptのdeclare classとinterfaceの違いとは?
-
[解決済み] JavaScriptで:hoverのCSSプロパティを変更する
-
[解決済み] JSXとLoadshを使用して、ある要素をn回繰り返す方法
-
[解決済み] jqueryはjavascriptのライブラリなのかフレームワークなのか?[クローズド]
-
[解決済み] AJAX Mailchimp サインアップフォームの統合
-
[解決済み] Node.jsのES6クラスをrequireで作る
-
[解決済み] HTML要素にスクロールバーがあるかどうかをチェックする