试一试
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;否则为 false。u 标志启用各种与 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 感知模式时,意味着正则表达式同时具有 u 或 v 标志,此时正则表达式会启用 Unicode 相关特性(例如 Unicode 字符类转义)并具有更严格的语法规则。由于 u 和 v 以不兼容的方式解释相同的正则表达式,因此同时使用这两个标志会导致 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 |
浏览器兼容性
加载中…