首页/开发/正则与编码速查/JS Unicode 模式下正则行为

JS Unicode 模式下正则行为

JS Unicode 模式让正则按码点而非 UTF-16 码元处理文本,点号与量词不再拆开表情符号,并启用属性转义(需写完整属性名);未启用时属性转义会静默按字面文本匹配。该模式不改变简写类的 ASCII 语义,与另一集合运算标志互斥。

正则与编码速查开发更新于 2026-10-17
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌‌​​‌​​‌‌​​‌​‌​‌‌​​‌‌‌​‌‌​​‌​‌​‌‌‌‌​​​​​‌​‌‌‌‌​‌‌​‌​‌​​‌‌‌​​‌‌​​‌​‌‌​‌​‌‌‌​‌​‌​‌‌​‌‌‌​​‌‌​‌​​‌​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​​‌​​​‌‌​​‌​‌​​‌​‌‌​‌​‌‌‌​​‌​​‌‌​​‌​‌​‌‌​​‌‌‌​‌‌​​‌​‌​‌‌‌‌​​​​​‌​‌‌​‌​‌‌​​‌‌​​‌‌​‌‌​​​‌‌​​​​‌​‌‌​​‌‌‌​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​

JS Unicode 模式下的行为

启用 Unicode 模式后,正则按码点而不是按 UTF-16 码元处理文本:量词与点号作用于完整字符,字符类按码点匹配,属性转义才可用。不启用时,一个补充平面字符会被当成两个单位,字符数量统计、截断与匹配结果都会与直觉不同,而且属性转义不会报错,会静默变成字面文本匹配。

基本信息

字符单位未启用时按码元,启用后按码点,影响点号与量词的作用对象
属性转义仅在启用后可用,可写脚本或类别属性
转义严格度启用后转义规则更严格,部分宽松写法会直接报语法错误
互斥标志另有一种面向字符类集合运算的标志,与它互斥,不能同时使用

典型使用场景

  • 含表情符号的输入:校验、截断、计数都必须按码点处理才能避免截断到半个字符
  • 按文字系统校验:判断是否为某语言字符集,需要属性转义
  • 扩展区汉字处理:生僻字位于补充平面,未启用模式时长度与匹配都异常
  • 长度限制:按字符数限制输入长度时,需要与实际字符单位一致
  • 集合运算场景:对字符类做交并差时使用另一种标志,注意与它互斥

行为实测

行为实测
/^.$/.test('\u{1F600}');            // false:未启用时表情占两个码元
/^.$/u.test('\u{1F600}');           // true:启用后按码点处理
'\u{20000}'.length;                  // 2:字符串长度按码元计算
/\p{Han}/u.test('中');               // 报属性名非法:JS 要求写完整属性名
/\p{Script=Han}/u.test('中');        // true:启用模式并写完整属性名
/\p{Han}/.test('p{Han}');            // true:未启用时属性转义退化为字面文本匹配
/[\u{1F600}-\u{1F64F}]/u.test('\u{1F600}');  // 启用后可在字符类里按码点写区间

启用前后的差异

项目未启用启用后
字符单位UTF-16 码元码点
点号与量词可能拆开一个字符作用于完整字符
属性转义被当成字面文本,不报错可用,需写完整属性名
非法转义多数被当作字面量直接报语法错误
字符类合并运算不支持需使用另一种互斥标志
启用 Unicode 模式不会扩大简写类的覆盖范围:单词类与数字类仍按 ASCII 解释,要匹配汉字或其他语言字母必须改用属性转义或显式区间,这一点与直觉相反。
启用后建议对全部既有模式跑一遍回归:原先依赖宽松转义的写法可能直接报错,尤其是字符类中的连字符与反斜杠位置。

易错点

  • 忘记启用模式处理表情:字符长度与匹配次数与直觉不符,截断操作会切出无效字符
  • 写属性转义却不启用模式:不会报错,而是把整个表达式当成字面文本去匹配,规则静默失效
  • 属性名写法不完整:JS 要求完整的属性名形式,缩写形式会被判为非法属性
  • 以为启用模式能让简写类覆盖非 ASCII:单词类与数字类仍是 ASCII 语义
  • 把字符串长度当作字符数:字符串长度按码元计算,与按码点计数不同,长度校验会出现偏差

数据来源与参考

  • MDN:正则表达式 u 标志与 Unicode 属性转义
  • ECMAScript 语言规范:Unicode 模式下的模式语义
  • MDN:字符串 length 与代理对说明

整理校对:其其网ICT文档中心 · 本页地址:docs.qiqicto.com/regex/js-unicode-regex-flag.html

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌‌​​‌​​‌‌​​‌​‌​‌‌​​‌‌‌​‌‌​​‌​‌​‌‌‌‌​​​​​‌​‌‌‌‌​‌‌​‌​‌​​‌‌‌​​‌‌​​‌​‌‌​‌​‌‌‌​‌​‌​‌‌​‌‌‌​​‌‌​‌​​‌​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​​‌​​​‌‌​​‌​‌​​‌​‌‌​‌​‌‌‌​​‌​​‌‌​​‌​‌​‌‌​​‌‌‌​‌‌​​‌​‌​‌‌‌‌​​​​​‌​‌‌​‌​‌‌​​‌‌​​‌‌​‌‌​​​‌‌​​​​‌​‌‌​​‌‌‌​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​