1. ホーム
  2. ジャバスクリプト

[解決済み】JavaScriptの正規表現で名前付きキャプチャグループ?

2022-04-04 08:53:30

質問

私の知る限り、JavaScriptには名前付きキャプチャグループというものは存在しません。同様の機能を得るには、どのような方法がありますか?

どのように解決するのですか?

ECMAScript 2018の紹介 名前付きキャプチャグループ をJavaScriptの正規表現に追加しました。

  const auth = 'Bearer AUTHORIZATION_TOKEN'
  const { groups: { token } } = /Bearer (?<token>[^ $]*)/.exec(auth)
  console.log(token) // "Prints AUTHORIZATION_TOKEN"

古いブラウザをサポートする必要がある場合、通常の(番号のついた)捕捉グループを使って、名前のついた捕捉グループを使ってできることはすべてできます。

名前付き捕捉グループの構造的な利点は2つだけです。

  1. いくつかの正規表現(私が知る限り、.NETとJGSoft)では、正規表現で異なるグループに対して同じ名前を使用することができます ( これが重要な例として、こちらをご覧ください。 ). しかし、ほとんどの正規表現では、この機能はサポートされていません。

  2. 数字で囲まれた状況で、番号付きのキャプチャグループを参照する必要がある場合、問題が発生することがあります。例えば、ある数字に0を加えたいので、以下のように置き換えるとします。 (\d)$10 . JavaScriptでは、これは(正規表現で捕捉グループが10個以下である限り)動作しますが、Perlでは後方参照番号を探していると判断されます。 10 ではなく、番号 1 の後に 0 . Perl では ${1}0 この場合

それ以外では、名前付き捕捉グループは単なる構文上の糖分です。キャプチャリンググループは本当に必要なときだけ使い、キャプチャリンググループでないものを使用するのが効果的です。 (?:...) を、それ以外のすべての状況で使用します。

私が思うに、JavaScriptの大きな問題は、読みやすく複雑な正規表現を簡単に作成できる冗長正規表現をサポートしていないことです。

Steve LevithanのXRegExpライブラリ はこれらの問題を解決してくれます。