跳转到主要内容
模块 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 次尝试后可用的解决方案