Regular Expression \R Escape for ECMAScript

Status

Stage: 1
Champion: Ron Buckton (@rbuckton)

For detailed status of this proposal see TODO, below.

Authors

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.

Syntax

  • \R — Matches any line ending character sequence.

NOTE: Requires the u or v flags, as \R is currently just an escape for R without the u flag.

NOTE: Not supported inside of a character class.

Semantics

  • In u or v mode, \R is roughly equivalent to the following pattern:
    (?>\r\n?|[\x0A-\x0C\x85\u{2028}\u{2029}])
    
    • Aligns with ^ and $ in mu mode
  • When not in u or v mode, \R will continue to match the literal character R.

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);

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

Stage 3 Entrance Criteria

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.