JavaScript 正規表現での名前付きキャプチャグループ? 質問する

JavaScript 正規表現での名前付きキャプチャグループ? 質問する

私の知る限り、JavaScript には名前付きキャプチャ グループというものはありません。同様の機能を実現する別の方法は何ですか?

ベストアンサー1

ECMAScript 2018では、名前付きキャプチャグループJavaScript 正規表現に変換します。

例:

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

古いブラウザをサポートする必要がある場合、名前付きキャプチャ グループで実行できるすべての操作を通常の (番号付き) キャプチャ グループで実行できます。必要なのは番号を追跡することだけです。ただし、正規表現内のキャプチャ グループの順序が変更されると、面倒になる可能性があります。

私が考えられる名前付きキャプチャ グループの「構造上の」利点は 2 つだけです。

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

  2. 数字で囲まれた番号付きキャプチャ グループを参照する必要がある場合、問題が発生する可能性があります。たとえば、数字に 0 を追加して、 を(\d)に置き換えたいとします。JavaScript では、これは機能します (正規表現内のキャプチャ グループが 10 個未満の場合)。ただし、Perl は、数値 ではなく$10、後方参照数値 を探していると認識し、 が続きます。Perl では、この場合は を使用できます。1010${1}0

(?:...)それ以外では、名前付きキャプチャ グループは単なる「構文上の糖衣」です。キャプチャ グループは本当に必要な場合にのみ使用し、それ以外の状況では非キャプチャ グループを使用すると便利です。

JavaScript のより大きな問題は (私の意見では)、読みやすく複雑な正規表現の作成をはるかに容易にする詳細な正規表現をサポートしていないことです。

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

おすすめ記事