Awesome
<!--#region:intro-->Regular Expression \R
Escape for ECMAScript
<!--#endregion:intro-->
<!--#region:status-->
Status
Stage: 1
Champion: Ron Buckton (@rbuckton)
For detailed status of this proposal see TODO, below.
<!--#endregion:status--> <!--#region:authors-->Authors
- Ron Buckton (@rbuckton)
Motivations
NOTE: See https://github.com/rbuckton/proposal-regexp-features for an overview of how this proposal fits into other possible future features for Regular Expressions.
The \R
escape sequence matches the various sets of code points that match a unicode line terminator, which can be difficult to write correctly.
Prior Art
See https://rbuckton.github.io/regexp-features/features/line-endings-escape.html for additional information.
<!--#endregion:prior-art--> <!--#region:syntax-->Syntax
\R
— Matches any line ending character sequence.
NOTE: Requires the
u
orv
flags, as\R
is currently just an escape forR
without theu
flag.
<!--#endregion:syntax--> <!--#region:semantics-->NOTE: Not supported inside of a character class.
Semantics
- In
u
orv
mode,\R
is roughly equivalent to the following pattern:(?>\r\n?|[\x0A-\x0C\x85\u{2028}\u{2029}])
- Aligns with
^
and$
inmu
mode
- Aligns with
- When not in
u
orv
mode,\R
will continue to match the literal characterR
.
<!--#endregion:semantics--> <!--#region:examples-->NOTE: The above example uses atomic groups
(?>)
to prevent backtracking when matching\r\n?
. Atomic groups is proposed here.
Examples
// split lines regardless of line termiantor style
const lines = fs.readFileSync("file.txt", "utf8").split(/\R/ug);
<!--#endregion:examples-->
<!--#region:api-->
<!-- # API -->
<!--#endregion:api-->
<!--#region:grammar-->
<!-- # Grammar
```grammarkdown
``` -->
<!--#endregion:grammar-->
<!--#region:references-->
<!-- # References
> TODO: Provide links to other specifications, etc.
* [Title](url) -->
<!--#endregion:references-->
History
- October 28, 2021 — Proposed for Stage 1 (slides)
- Outcome: Advanced to Stage 1
TODO
The following is a high-level list of tasks to progress through each stage of the TC39 proposal process:
Stage 1 Entrance Criteria
- Identified a "champion" who will advance the addition.
- Prose outlining the problem or need and the general shape of a solution.
- Illustrative examples of usage.
-
High-level API.
Stage 2 Entrance Criteria
- Initial specification text.
-
Transpiler support (Optional).
Stage 3 Entrance Criteria
- Complete specification text.
- Designated reviewers have signed off on the current spec text.
- The ECMAScript editor has signed off on the current spec text.
Stage 4 Entrance Criteria
- Test262 acceptance tests have been written for mainline usage scenarios and merged.
- Two compatible implementations which pass the acceptance tests: [1], [2].
- A pull request has been sent to tc39/ecma262 with the integrated spec text.
- The ECMAScript editor has signed off on the pull request.