パーサーの実装をやってると、
- どういう経緯で今のシンタックスになった?
- これから先どういう変更が?
などなど、そういうのが気になる・・・。
というわけで、tc39/proposalsのリポジトリを見て、関係がありそうなものをまとめておこうかと。
tc39/proposals: Tracking ECMAScript Proposals https://github.com/tc39/proposals
Finished
まずは既に仕様として公開されてるものたち。
- ES2018:
s(dotAll) flag for regular expressionssフラグで、.が真にすべてにマッチするように
- ES2018: RegExp named capture groups
/(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/みたく、キャプチャグループ名をつけられるように
- ES2018: RegExp Lookbehind Assertions
/(?<=\$)\d+/みたく、後を読めるように
- ES2018: RegExp Unicode Property Escapes
/\p{Script=Greek}/uみたく、Unicodeプロパティが使えるように
- ES2022: RegExp Match Indices
dフラグで、キャプチャしたグループを示すインデックスのレンジが取れるようになるように
- ES2024: RegExp v flag with set notation + properties of strings
vフラグで、uフラグを拡張して[character_class]の文法が色々と拡張されたり、Unicodeプロパティの種類も増えるように
- ES2025: Duplicate named capture groups
/(?<year>[0-9]{4})-[0-9]{2}|[0-9]{2}-(?<year>[0-9]{4})/みたく、|で分かれていれば同じキャプチャグループ名が使えるように
現時点では、ES2024までが公開されてる仕様だということと、ES2025の仕様書は公開されてはいるものの、Duplicate named capture groupsの変更は、まだマージされてないことに注意。
Normative: allow duplicate named capture groups by bakkot · Pull Request #2721 · tc39/ecma262 https://github.com/tc39/ecma262/pull/2721
Active
まだ検討中で、これから仕様になろうとしているものたち。
- Stage3: Legacy RegExp features in JavaScript
- AnnexB関連
- Stage3: RegExp Modifiers
/^[a-z](?-i:[a-z])$/iみたく、フラグを一部で無効・有効にできるように
- Stage2: RegExp Buffer Boundaries (
\A,\z,\Z)mフラグがあっても、^と$みたく行頭・行末にマッチできるように
- Stage1: RegExp Extended Mode and Comments
xフラグで、スペースを無視させたり、/foo(?#comment)bar/xみたくコメントが書けるように
- Stage1: RegExp
\REscape\RであらゆるLine terminatorをマッチできるように
- Stage1: RegExp Atomic Operators
(?>pattern)みたく書くと、バックトラッキングさせないように
https://github.com/tc39/proposals/blob/4f82000c5e7b7eb4879b61ee6945a19b9f5f9d02/README.md https://github.com/tc39/proposals/blob/4f82000c5e7b7eb4879b61ee6945a19b9f5f9d02/stage-1-proposals.md
まだそんなに機能追加する余地あるんや・・・って感じ。