正则与文本处理指南
Unicode 正则:为什么单词边界漏掉中文
使用 Unicode 属性转义表达字母集合,理解 JavaScript 单词类和单词边界的范围。
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 正则本身不会自动完成字素分割。
检查归一化与近形字符
规范等价文本可能具有不同底层序列,归一化帮助比较,但不能消除所有近形字符。
测试目标文字、重音和混合文字,把标识符安全策略与一般字母匹配规则分开。