For AI agents: the complete documentation index is available at /tc39-atlas/en/llms.txt, the full documentation bundle is available at /tc39-atlas/en/llms-full.txt, and this page is available as Markdown at /tc39-atlas/en/proposals/year/pending/proposal-regexp-r-escape.md.
  • English
  • RegExp \R Escape S1

    Proposal details
    Proposal overview

    This proposal introduces the \R escape in regular expressions to match any Unicode line terminator sequence, which is currently difficult to write correctly. It requires the u or v flags and is not supported inside character classes.

    Note

    The README below comes from the upstream repository and may contain outdated stage or status metadata. Use the proposal details above as the current source of truth.

    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.