[解決済み】JavaScriptの正規表現で名前付きキャプチャグループ?
質問
私の知る限り、JavaScriptには名前付きキャプチャグループというものは存在しません。同様の機能を得るには、どのような方法がありますか?
どのように解決するのですか?
ECMAScript 2018の紹介 名前付きキャプチャグループ をJavaScriptの正規表現に追加しました。
例
const auth = 'Bearer AUTHORIZATION_TOKEN'
const { groups: { token } } = /Bearer (?<token>[^ $]*)/.exec(auth)
console.log(token) // "Prints AUTHORIZATION_TOKEN"
古いブラウザをサポートする必要がある場合、通常の(番号のついた)捕捉グループを使って、名前のついた捕捉グループを使ってできることはすべてできます。
名前付き捕捉グループの構造的な利点は2つだけです。
-
いくつかの正規表現(私が知る限り、.NETとJGSoft)では、正規表現で異なるグループに対して同じ名前を使用することができます ( これが重要な例として、こちらをご覧ください。 ). しかし、ほとんどの正規表現では、この機能はサポートされていません。
-
数字で囲まれた状況で、番号付きのキャプチャグループを参照する必要がある場合、問題が発生することがあります。例えば、ある数字に0を加えたいので、以下のように置き換えるとします。
(\d)
で$10
. JavaScriptでは、これは(正規表現で捕捉グループが10個以下である限り)動作しますが、Perlでは後方参照番号を探していると判断されます。10
ではなく、番号1
の後に0
. Perl では${1}0
この場合
それ以外では、名前付き捕捉グループは単なる構文上の糖分です。キャプチャリンググループは本当に必要なときだけ使い、キャプチャリンググループでないものを使用するのが効果的です。
(?:...)
を、それ以外のすべての状況で使用します。
私が思うに、JavaScriptの大きな問題は、読みやすく複雑な正規表現を簡単に作成できる冗長正規表現をサポートしていないことです。
Steve LevithanのXRegExpライブラリ はこれらの問題を解決してくれます。
関連
-
[解決済み】Failed to load resource: net::ERR_FILE_NOT_FOUND loading json.js
-
[解決済み] エラー。モジュールhtmlが見つからない
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] JavaScriptでメールアドレスを検証するのに最適な方法は何ですか?
-
[解決済み] JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?
-
[解決済み] JavaScript で配列に値が含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み] JavaScriptでURLをエンコードする?
-
[解決済み】JavaScript版sleep()とは?)
-
[解決済み】JavaScriptのオブジェクトの長さ
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】document.getElementByIDは関数ではありません。
-
[解決済み】NodeJS "ESモジュールをロードするためにインポートを使用する必要があります。"
-
[解決済み】JavaScriptのinnerHTMLで要素が更新されない
-
[解決済み】Google Conversionsが動作しない - スクリプトが読み込まれない
-
[解決済み】「Uncaught TypeError: Chromeで "Illegal invocation "が発生する。
-
[解決済み】Javascript - ERR_CONTENT_LENGTH_MISMATCH
-
[解決済み】React-Routerの子が1つしかない。
-
[解決済み】リソースはドキュメントと解釈されるが、MIMEタイプはapplication/zipで転送される
-
[解決済み】TypeError: AngularJSで未定義のプロパティ'get'を読み取れない
-
[解決済み】Javascript、[オブジェクトHTMLInputElement]を表示中。]