RegExp Modifiers S4
中文标题:正则表达式修饰符
- 阶段: Stage 4
- 状态: 已完成
- ECMAScript 版本: ES2025
- 同步时间: 2026年8月26日
- English original · 官方仓库
该提案为 ECMAScript 正则表达式引入了模式修饰符,允许在子表达式中使用诸如 (?imsx-imsx:子表达式) 的语法切换 i、m、s 和 x 等标志。它解决了在无法执行代码的上下文(如配置文件)中控制正则表达式标志的需求。
以下 README 来自上游仓库,其中的阶段或状态标注可能滞后;当前信息以提案概览为准。
ECMAScript 正则表达式模式修饰符
状态
阶段: 4
提案负责人: Ron Buckton (@rbuckton)
关于本提案的详细状态,请参见下面的 TODO。
作者
- Ron Buckton (@rbuckton)
动机
在大多数正则表达式引擎中,一个常见的功能是能够控制正则表达式标志(flags)的子集,例如:
i— 忽略大小写m— 多行模式s— 单行模式(也称为“点号匹配所有字符”)x— 扩展模式(参见 https://github.com/rbuckton/proposal-regexp-x-mode)
当正则表达式在无法评估可执行代码的上下文中定义时(例如 JSON 配置文件或 TextMate tmLanguage 语法文件),修饰符尤其有用。
作为本提案的一部分,我们将研究每个现有的(以及未来提议的)RegExp 标志,以确定它们是否适合用作修饰符。
现有实现
更多信息请参见 https://rbuckton.github.io/regexp-features/features/modifiers.html 。
语法
修饰符允许您在子表达式内更改当前活动的 RegExp 标志。
(?imsx-imsx:子表达式)— 为子表达式设置或取消(使用-)指定的 RegExp 标志。(?imsx-imsx)— 从当前位置开始,直到下一个右括号)或模式结束,设置或取消(使用-)指定的 RegExp 标志。
注意:某些标志不能在表达式中间修改。目前包括
g(全局)、y(粘性)、u(Unicode)和d(hasIndices)。
注意:实际支持的标志将根据具体情况确定。参见 #1。
注意:这与现有语法没有冲突,因为 ECMAScript 目前对此语法在
u和非u模式下均会产生错误。
注意:“自包含”形式(
(?imsx-imsx:子表达式))于 2021 年 12 月 15 日推进到 Stage 2。
注意:自 2021 年 12 月 15 日起,“无边界”形式(
(?imsx-imsx))不再作为本提案的一部分考虑。
示例
历史
- 2021 年 10 月 27 日 — 提议进入 Stage 1(幻灯片)
- 结果:进入 Stage 1
- 2021 年 12 月 15 日 — 提议进入 Stage 2(幻灯片)
- 结果:仅以“自包含”形式进入 Stage 2(“无边界”形式未通过)。
- Stage 2 审查人:Richard Gibson、Waldemar Horwat
- 2022 年 6 月 7 日 — 提议进入 Stage 3(幻灯片)
- 结果:进入 Stage 3
TODO
以下是推进 TC39 提案流程 各个阶段所需的高级任务列表:
Stage 1 进入标准
Stage 2 进入标准
Stage 2.7 进入标准
Stage 3 进入标准
Stage 4 进入标准
- 两个通过验收测试的兼容实现:
- V8 - 在 Chrome 125/Edge 125 中发布
- SpiderMonkey - 在 Firefox 130 中带标志发布,在 Firefox 132b(Nightly)中取消标志并发布
- JSC
- Engine262
- 已向 tc39/ecma262 发送了包含集成规范文本的拉取请求。
- ECMAScript 编辑器已签署拉取请求。