如何在 ES9 中使用正则表达式

正则表达式是一种广泛应用于字符串匹配、替换等操作的工具,它可以在很多编程语言中使用,包括 JavaScript。ES9 支持了一些新的正则表达式语法,本文章将介绍如何在 ES9 中使用正则表达式。

RegExp 构造函数的扩展

在 ES9 中,RegExp 构造函数得到了扩展,它现在可以接收第二个参数 flags,和正则字面量的 flags 相同。例:

在这个例子中,创建了一个不区分大小写的全局模式正则表达式,与下面正则字面量的写法等价:

这个语法的优势之一是可以在程序运行时动态生成正则表达式,因为我们可以在标准的字符串中定义正则表达式,稍后再使用 RegExp 构造函数解析该字符串。

RegExp 现在支持后行断言

ES9 引入了后行断言,它们可以用来匹配一个字符串中的某些内容,这些内容在其前面是一个特定模式,同时还在另一些特定模式的后面,后行断言用 (?<=...) 表示,在 ... 的位置插入匹配模式即可。例如:

在这个例子中,后行断言匹配了一个字符串 "bar",它前面必须是 "foo",这个语法还支持使用 (?<!...) 表示“不再这个动作的前面”。

RegExp 现在支持 Unicode 属性转义

Unicode 属性转义是一些特殊的转义序列,它们可以用来匹配特定的 Unicode 属性值。ES9 引入了适用于正则表达式中的 Unicode 属性转义。

在正则表达式中使用 Unicode 属性转义时,必须写成 \p{...} 的形式,例如匹配 Unicode 双字节字符:

在这个例子中,\p{Unified_Ideograph} 表示一个 Unicode 第一层次表意文字。

一些常见的 Unicode 属性与值

字母和数字

  • \p{L}:任意 Unicode 字母字符,等价于 [a-zA-Z]。
  • \p{Ll}:任意小写字母字符。
  • \p{Lu}:任意大写字母字符。
  • \p{Lt}:任意标题字母,如标题的使用,例如英文中的首字母大写,后续字母小写。
  • \p{Lm}:任意标记字母,例如阿拉伯语中的命名字符。
  • \p{Lo}:其他的任意字母字符集。

标点符号

  • \p{P}:字符以及任何类型的标点符号字符。
  • \p{Pc}:任何连字符或下划线,如破折号、连字号。
  • \p{Pd}:任何类型的连字符,如 iso-8859-1 中中划线的一个副本。
  • \p{Ps}:任何类型的起始括号,如小括号。
  • \p{Pe}:任何类型的结束括号,如小括号。
  • \p{Pi}:任何类型的起始引号,如中文的引号。
  • \p{Pf}:任何类型的结束引号,如中文的引号。
  • \p{Po}:任何类型的其他标点符号。

示例代码

使用后行断言匹配域名中二级域名,并且在它的前面必须是 www 或 m:

使用 Unicode 属性转义匹配接连出现的表意文字:

总结

ES9 带来了一些新的正则表达式语法,其中后行断言和 Unicode 属性转义是其中最引人注目的特性之一。在实际使用过程中,我们可以灵活应用这些语法,提升代码的可读性和效率。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6532a0ca7d4982a6eb56d866


纠错
反馈