正则与文本处理指南

Unicode 正则:为什么单词边界漏掉中文

使用 Unicode 属性转义表达字母集合,理解 JavaScript 单词类和单词边界的范围。

Nav Tools ·

word 是引擎规则

JavaScript 传统 \w 主要覆盖 ASCII 字母、数字和下划线,特定标志组合还存在有限大小写折叠行为,并非所有 Unicode 字母。

基于 word 与非 word 转换的边界未必能切分中文等文字,应明确字符规则而非假定其等于自然语言分词。

使用 Unicode 属性

Unicode 模式中的 \p{L} 可匹配不同文字的字母,下面通过 u 启用相应语法。

只添加规则所需类别,纯字母表达式排除数字、标点和某些姓名所需组合标记。

Pattern: \p{L}+
Flags: gu
Input: Ada 中文 123
Matches: Ada, 中文

码点不等于感知字符

一个显示字符可能包含多个码点,组合重音和 emoji 序列让码点量词与视觉字数限制不同。

需求面向用户感知字符时应使用字素分割 API,Unicode 正则本身不会自动完成字素分割。

检查归一化与近形字符

规范等价文本可能具有不同底层序列,归一化帮助比较,但不能消除所有近形字符。

测试目标文字、重音和混合文字,把标识符安全策略与一般字母匹配规则分开。

参考资料

← 正则与文本处理指南