RegExp.prototype.unicode

Baseline 已广泛支持

此特性已非常成熟,可在多种设备和浏览器版本上使用。自 ⁨2016 年 9 月⁩以来,它已在各大浏览器中可用。

unicode 访问器属性属于 RegExp 实例,用于返回该正则表达式是否使用了 u 标志。

试一试

const regex1 = /\u{61}/;
const regex2 = /\u{61}/u;

console.log(regex1.unicode);
// Expected output: false

console.log(regex2.unicode);
// Expected output: true

描述

如果使用了 u 标志,则 RegExp.prototype.unicode 的值为 true;否则为 falseu 标志启用各种与 Unicode 相关的特性。使用 "u" 标志时:

  • 任何 Unicode 代码点转义\u{xxxx}\p{UnicodePropertyValue})将被解释为 Unicode 代码点,而不是普通转义。例如,/\u{61}/u 匹配 "a",而 /\u{61}/(不带 u 标志)匹配 "u".repeat(61),其中 \u 等同于单个 u
  • 代理对将被解释为整个字符,而不是两个单独的字符。例如,/[😄]/u 只会匹配 "😄",而不会匹配 "\ud83d"
  • lastIndex 自动前进时(例如,在调用 exec() 时),Unicode 正则表达式会按 Unicode 代码点前进,而不是按 UTF-16 代码单元前进。

解析行为的其他一些更改可以防止潜在的语法错误(这类似于正则表达式语法的 严格模式)。这些语法都已被 弃用,仅为保持 Web 兼容性而保留,您不应依赖它们。

unicode 的设置访问器为 undefined。您无法直接更改此属性。

Unicode 感知模式

当我们提到Unicode 感知模式时,意味着正则表达式同时具有 uv 标志,此时正则表达式会启用 Unicode 相关特性(例如 Unicode 字符类转义)并具有更严格的语法规则。由于 uv 以不兼容的方式解释相同的正则表达式,因此同时使用这两个标志会导致 SyntaxError

类似地,如果正则表达式既没有 u 标志也没有 v 标志,则该正则表达式被视为Unicode 不感知。在这种情况下,正则表达式被解释为 UTF-16 代码单元序列,并且存在许多不会导致语法错误的旧式语法。

示例

使用 unicode 属性

js
const regex = /\u{61}/u;

console.log(regex.unicode); // true

规范

规范
ECMAScript® 2026 语言规范
# sec-get-regexp.prototype.unicode

浏览器兼容性

另见