ES9 中的正则表达式(RegExp)相关的更新

ES9 中的正则表达式(RegExp)相关的更新

前言

在 ES6 中,对于正则表达式(RegExp)的支持已经趋于完善,但是随着业务需求的不断增加,我们对正则表达式的需求也越来越高,因此在 ES9 中,对正则表达式进行了升级,增加了一些非常实用的新特性,本文将介绍 ES9 中正则表达式相关的更新。

零宽度断言

ES9 中新增了一种非常重要的特性——零宽度断言(zero-width assertions),它可以匹配某个字符前面或者后面的位置,而不是实际的字符本身。

通俗点来讲就是在不获取正确的匹配的情况下设置匹配的条件,这样就不会改变实际的匹配结果。

顺序肯定先行断言

顺序肯定先行断言(Positive Lookahead)是一种零宽度断言,常用于寻找一个前缀,比如匹配邮件地址的用户名部分。

语法:

示例代码:

注释:

该正则表达式通过零宽度断言判断“good”后面紧跟的字符是不是字母、数字或下划线。因此,第一、二个测试用例均返回 true,而第三个测试用例返回 false。

顺序否定先行断言

顺序否定先行断言(Negative Lookahead)与顺序肯定先行断言类似,但是匹配条件与之相反。

语法:

示例代码:

注释:

第一个测试用例符合匹配条件,返回 true,而第二个测试用例不符合匹配条件,返回 false。

顺序肯定后行断言

顺序肯定后行断言(Positive Lookbehind)是一种零宽度断言,常用于寻找一个后缀,比如匹配时间字符串中的小时。

语法:

示例代码:

注释:

正则表达式通过逆序前行断言判断“:”前面是不是数字。因此,第一、二个测试用例均符合条件,返回 true,而第三个测试用例不符合条件,返回 false。

顺序否定后行断言

顺序否定后行断言(Negative Lookbehind)与顺序肯定后行断言类似,但是匹配条件与之相反。

语法:

示例代码:

注释:

正则表达式通过逆序前行断言判断“:”前面不是数字。因此,第一、二个测试用例均符合条件,返回 true,而第三个测试用例不符合条件,返回 false。

其他更新内容

正则表达式命名捕获组

在 ES9 中,正则表达式引入了一个新概念,即命名捕获组,可以给捕获到的子串命名,方便后续对其进行操作。

语法:

示例代码:

注释:

正则表达式通过命名捕获组以每个部分的名字来捕获,这大大增加了代码的可读性,使开发更加便利。

Unicode 字符转义

在 ES6 中,Unicode 字符序列已经获得了很好的支持,而在 ES9 中,正则表达式也新增了关于 Unicode 的支持,可以使用 Unicode 字符转义来匹配 Unicode 字符。

语法:

示例代码:

注释:

使用 Unicode 字符转义,可以非常方便地进行 Unicode 字符匹配,造福于多语言开发的需求。

总结

ES9 中的正则表达式是一个非常实用的更新,引入了零宽度断言、正则表达式命名捕获组、Unicode 字符转义等一系列实用的功能,这些功能的引入,极大的扩展了正则表达式的能力,提高了正则表达式的可读性和可维护性。因此,在编写复杂的前端页面时,我们可以更加自主地应用这些新特性,让代码更加简洁、高效。

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


纠错
反馈