返回

ECMAScript 2018 规范正式发布:正则表达式有新变化!

前端

ECMAScript 2018 正则表达式的新增特性

ECMAScript 2018 中正则表达式的新增特性包括:

  • 命名捕获组 :允许您为捕获组指定名称,以便在稍后使用。
  • 后行断言 :允许您匹配紧跟在某个子模式后面的内容。
  • 负后行断言 :允许您匹配不紧跟在某个子模式后面的内容。
  • Unicode 属性转义 :允许您使用 Unicode 属性来匹配字符。
  • Unicode 代码点转义 :允许您使用 Unicode 代码点来匹配字符。

命名捕获组

命名捕获组允许您为捕获组指定名称,以便在稍后使用。这对于从正则表达式中提取数据非常有用。例如,以下正则表达式匹配一个电子邮件地址:

/^([a-zA-Z0-9_\.\-]+)@([a-zA-Z0-9\-]+\.[a-zA-Z0-9\-]+)$/

如果我们想从这个正则表达式中提取用户名和域名,我们可以使用命名捕获组:

/^((?<username>[a-zA-Z0-9_\.\-]+))@((?<domain>[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-]+))$/

现在,我们可以使用 usernamedomain 变量来访问捕获的数据:

const email = "john.doe@example.com";
const match = email.match(/^((?<username>[a-zA-Z0-9_\.\-]+))@((?<domain>[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-]+))$/);
console.log(match.groups.username); // "john.doe"
console.log(match.groups.domain); // "example.com"

后行断言

后行断言允许您匹配紧跟在某个子模式后面的内容。这对于匹配特定格式的数据非常有用。例如,以下正则表达式匹配一个以 http:// 开头、以 .com 结尾的 URL:

/^http:\/\/.*\.com$/

如果我们想匹配一个以 http:// 开头、以 .com 结尾、并且中间没有任何空格的 URL,我们可以使用后行断言:

/^http:\/\/.*\.com(?=)$/

后行断言 (?=)$ 匹配一个空字符串,但只有当它紧跟在 .com 之后时才会匹配。因此,这个正则表达式将匹配 http://www.example.com,但不匹配 http://www.example.com

负后行断言

负后行断言允许您匹配不紧跟在某个子模式后面的内容。这对于匹配不特定格式的数据非常有用。例如,以下正则表达式匹配一个不以 http:// 开头的 URL:

/^(?!http:\/\/).*$/

负后行断言 ^(?!http:\/\/) 匹配一个空字符串,但只有当它不紧跟在 http:// 之后时才会匹配。因此,这个正则表达式将匹配 www.example.com,但不匹配 http://www.example.com

Unicode 属性转义

Unicode 属性转义允许您使用 Unicode 属性来匹配字符。这对于匹配具有特定属性的字符非常有用。例如,以下正则表达式匹配一个大写字母:

/[\p{Uppercase}]/

Unicode 属性转义 \p{Uppercase} 匹配任何大写字母。因此,这个正则表达式将匹配 ABC 等字母。

Unicode 代码点转义

Unicode 代码点转义允许您使用 Unicode 代码点来匹配字符。这对于匹配特定字符非常有用。例如,以下正则表达式匹配一个爱心符号:

/\u2764/

Unicode 代码点转义 \u2764 匹配爱心符号。因此,这个正则表达式将匹配爱心符号。

结语

ECMAScript 2018 中正则表达式的新增特性为开发人员提供了更多强大的工具来处理文本数据。这些新特性可以帮助开发人员编写更简洁、更易读的正则表达式,从而提高开发效率。