模块 5 · 第 4 课(共 4)课程中的20/32~12 min
模块课程(4/4)
Unicode 属性转义
ASCII 中的 \w、\d、\s 类不足以用于意大利语、法语、希腊语
或表情符号文本。现代 JavaScript(带有 u 标志 -- Unicode)提供
属性转义 \p{...}:基于 Unicode 的语义类
字符的属性。
Code
Pattern: \p{L}+ (with flag u)
Sample: Ciao caffe' \u00fcber \u4e16\u754c
^^^^ ^^^^^^^ ^^^^ ^^^^\p{L} = "任何字母 (Unicode)":包括重音字母、中文
表意文字、西里尔字母、希腊语……一切。最常见的:
\p{L}-- 字母(任何字母表)。\p{N}-- 数字(阿拉伯数字、罗马数字、印度数字)。\p{P}-- 标点符号。\p{S}-- 符号(数学、货币、表情符号\u2026)。\p{Z}-- 空格/分隔符。\p{Script=Latin}-- 特别是拉丁字母。\p{Script=Greek}-- 希腊字母。等等。
以及 否定 版本 \P{L}、\P{N}、\u2026
与 \w 和 \d 的区别
Code
\\w matches [A-Za-z0-9_] -- ASCII only, no "caffe'"
\\p{L}\\p{N}_ with flag u -- includes accented characters对于意大利语文本的强大解析器,首选 \p{L} 而不是 \w:
citta'、perche'、andro' 正确匹配单词。
Unicode 属性和浏览器兼容性
诸如 \\p{L} (字母)或 \\p{Script=Latin} 之类的 Unicode 属性将类扩展到国际字母表。在 JavaScript 中,它们严格要求 u (或 v)标志,否则引擎会抛出语法错误。
尝试一下
锻炼#regex.m5.l4.e1
尝试:0加载中...
查找每个单词,包括带有重音符号的单词(citta'、perche'、e' \u2026)。使用带有标志 u 的属性转义 \\p{L}。
正在加载编辑器...
显示提示
将 \\w+ 替换为 \\p{L}+ 并添加 u 标志(除了 g 之外)。
3 次尝试后可用的解决方案
复习练习
锻炼#regex.m5.l4.e2
尝试:0加载中...
查找文本中的每个 Unicode 符号(货币、数学、表情符号),不包括字母和数字。
正在加载编辑器...
显示提示
\\p{S} 匹配 Unicode 的符号类别。记住 u 标志。
3 次尝试后可用的解决方案
额外的挑战
锻炼#regex.m5.l4.e3
尝试:0加载中...
使用“\p{Script=Cyrillic}”查找由西里尔字母组成的所有单词。
正在加载编辑器...
显示提示
将 \\p{Script=Cyrillic} 与 + 量词和 u 标志一起使用。
3 次尝试后可用的解决方案