正規表現のキャプチャグループと非キャプチャグループを使う
グループ (...) は部分マッチをキャプチャし、後方参照や抽出に使えます。非キャプチャ (?:...) はキャプチャせずにグループ化します。名前付きグループ (?<name>...) は可読性を高めます。
- 1
括弧はグループを作ります。キャプチャグループ (...) はマッチした部分文字列を保存し、後で使えます (後方参照、置換、抽出)。非キャプチャの (?:...) は、保存せずに選択や繰り返しのためだけにグループ化します。名前付きグループ (?<name>...) や (?P<name>...) は、可読性のために名前を付けます。グループには、開き括弧の位置の左から右へ番号が付きます。
- 2 正規表現テスター →
グループを使ったパターンをテストします。(\d{4})-(\d{2})-(\d{2}) で日付から年・月・日を抽出できます。ツールはキャプチャされたグループを番号付きで表示します。分かりやすくするには、名前付きグループ (?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2}) を使ってください。
- 3 正規表現置換ツール →
置換でキャプチャグループを使います。(\d{4})-(\d{2})-(\d{2}) を $2/$3/$1 に置き換えると、日付を YYYY-MM-DD から MM/DD/YYYY に並べ替えられます。JavaScript では、番号付きグループに $1、$2 を、名前付きグループに $<name> を使います。
よくある質問
- (...) と (?:...) の違いは何ですか?
- (...) はキャプチャグループです。マッチしたテキストを保存して後で使えます ($1、\1) が、メモリを消費し、マッチがわずかに遅くなります。(?:...) は非キャプチャで、保存せずに選択や繰り返しのためにグループ化します。キャプチャした値が不要な場合は、性能と明確さのために非キャプチャを使ってください。
- 名前付きグループはどのように動作しますか?
- (?<name>pattern) は名前付きキャプチャグループを作成します。JavaScript (ES2018 以降) では match.groups.name でアクセスします。置換では $<name> を使います。名前付きグループにも (左から右へ) 番号が付くため、$1 も引き続き使えます。複雑なパターンの可読性が向上します。