パーサーの実装をやってると、
- どういう経緯で今のシンタックスになった?
- これから先どういう変更が?
などなど、そういうのが気になる・・・。
というわけで、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
\R
Escape\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
まだそんなに機能追加する余地あるんや・・・って感じ。