ES9 中新增的 Unicode 正则表达式特性
Unicode 是一种国际标准,它规定了全世界所有的文字和符号对应的唯一编号,这个编号也被称作“码点”。在 JavaScript 中,能够输入的大多数文本都是以 Unicode 编码方式存储的,但在早期的版本中,正则表达式并不支持 Unicode,用户需要手动编写复杂的正则表达式来匹配各种符号和文字。然而,ES9 新增了一些 Unicode 正则表达式的特性,使得我们可以更加方便快捷地使用和处理 Unicode 编码的数值和表达式。
一、字符分类符
在新版的 Unicode 正则表达式中,提供了一系列的字符分类符,以表示不同的字符类别和范围。这些字符分类符不仅可以用于匹配特定的字符,还可以与其他符号结合使用,以形成更加复杂的匹配规则,比如:
- \p{...}:匹配符合特定属性的字符,比如 \p{Letter} 表示匹配任意的字母。
- \P{...}:匹配不符合特定属性的字符,比如 \P{Space} 表示匹配任意非空格字符。
- \p{name=value}:匹配特定属性且属性值为某个值的字符,比如 \p{Script=Han} 表示匹配汉字字符。
- \p{name}=\p{value}:匹配符合两种属性的字符,比如 \p{Letter}=\p{Uppercase} 表示匹配所有大写字母。
- \p{ASCII}:匹配 ASCII 字符。
- \p{Any}:匹配任何字符。
- \p{L}:匹配所有字母,等价于 \p{Letter}。
除此之外,还有一些用于匹配数字、标点符号、空格、控制字符等的字符分类符。
二、代码点转义符
在 Unicode 编码中,有一些特殊字符需要使用代码点的形式表示,比如字符 \u{10231} 表示Unicode 码点为 10231 的字符。ES9 提供了一种特殊的转义符来简化这些表达式的编写,这种转义符用 Unicode 编码值的形式表示,比如 \u{1F600} 表示码点 U+1F600 对应的字符。这种转义符可以用于正则表达式中的字符集合,比如:
/\u{1F600}/u.test('😀') // true
三、更加简单的 Unicode 转换
ES9 中提供了另一种特殊的转换方式,使用 \u{...} 来表示 Unicode 码点,这个转换方式比起之前的方法更加简单和清晰,比如:
console.log('\u{2033}') // ″ console.log('\u{1f600}') // 😀 console.log('\u{1F1FA}\u{1F1F8}') // 🇺🇸
同时,ES9 还提供了一个更加直观的解码方法,使用 String.fromCodePoint() 方法来将 Unicode 码点转换为字符。比如:
console.log(String.fromCodePoint(119987)) // "🏓" console.log(String.fromCodePoint(0x61, 0x62, 0x63)) // "abc"
这两个转换方式也可用于正则表达式的模式中。
总结
ES9 新增的 Unicode 正则表达式特性提供了更加方便、快捷和直观的方式来处理和匹配 Unicode 编码的字符和表达式。同时,学习和使用这些技术也可以提升我们对于 Unicode 码点的理解和应用能力。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64efa722f6b2d6eab39a2a4f