名前付きキャプチャグループ: (?<name>...)
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
名前付きキャプチャグループは特定の種類のキャプチャグループで、グループに名前を付けることができます。グループの照合結果は、パターン内のインデックスではなく、この名前で後で識別することができます。
構文
(?<name>pattern)
引数
解説
名前付きキャプチャグループは、キャプチャグループと同様に使用することができます 。結果の配列の一致インデックスも持っており、\1
、\2
などによって参照することができます。唯一の違いは、名前によって「追加的に」参照することができるということです。 キャプチャグループの一致する情報には、以下のようにしてアクセスすることができます。
RegExp.prototype.exec()
、String.prototype.match()
、String.prototype.matchAll()
の返値のgroups
プロパティString.prototype.replace()
およびString.prototype.replaceAll()
メソッドのreplacement
コールバック関数のgroups
引数- 同じパターン内の名前付き後方参照
同じパターン内は、すべての名前が一意でなければなりません。同じ名前を持つ複数の名前付きキャプチャグループは構文エラーとなります。
/(?<name>)(?<name>)/; // SyntaxError: Invalid regular expression: Duplicate capture group name
重複する名前付きキャプチャグループが同じ論理和の選択肢にない場合、この制限は緩和されますので、どのような文字列入力に対しても、実際に一致できる名前付きキャプチャグループは 1 つだけです。これはかなり新しい機能なので、使う前にブラウザーの互換性をチェックしてください。
/(?<year>\d{4})-\d{2}|\d{2}-(?<year>\d{4})/;
// 動作します。"year" をハイフンの前にも後にも置くことができます
結果の中に、名前付きキャプチャグループはすべて存在します。名前付きキャプチャグループが一致していない場合(例えば、論理和で一致しない選択肢に属している場合)、groups
オブジェクトの対応するプロパティは undefined
の値になります。
/(?<ab>ab)|(?<cd>cd)/.exec("cd").groups; // [Object: null prototype] { ab: undefined, cd: 'cd' }
d
フラグを使用することで、入力文字列中のそれぞれの名前付きキャプチャグループの開始と終わりのインデックスを取得することができます。exec()
が返す配列の indices
プロパティで取得することに加えて、indices.groups
の名前でも取得することができます。
無名キャプチャグループに比べ、名前付きキャプチャグループには以下のような利点があります。
- 個々の部分一致の結果に説明的な名前を提供することができます。
- これにより、パターンに現れる順番を覚えておくことなく、部分一致の結果にアクセスすることができます。
- コードをリファクタリングするとき、他の参照を壊す心配をすることなく、キャプチャグループの順序を変更することができます。
例
名前付きキャプチャグループの使用
次の例は、Git のログ項目(git log --format=%ct,%an -- filename
の出力)からタイムスタンプと作者名を解析します。
function parseLog(entry) {
const { author, timestamp } = /^(?<timestamp>\d+),(?<author>.+)$/.exec(
entry,
).groups;
return `${author} committed on ${new Date(
parseInt(timestamp) * 1000,
).toLocaleString()}`;
}
parseLog("1560979912,Caroline"); // "Caroline committed on 6/19/2019, 5:31:52 PM"
仕様書
Specification |
---|
ECMAScript Language Specification # prod-Atom |
ブラウザーの互換性
BCD tables only load in the browser