ECMAScript 2018 (ES9) 中的新特性:RegExp Lookbehind Assertions

在 ECMAScript 2018 (ES9) 中,新增了一种正则表达式的特性—— Lookbehind Assertions(后行断言),可以用于匹配某个位置之前的文本部分,这种特性在某些场景下可以减少代码复杂度,提高代码效率,下面我们来详细了解一下。

Lookbehind Assertions 简介

什么是 Lookbehind Assertions?它是一种用来限定某个位置之前是否符合规则的语法。我们先来看一下一个简单的例子:

这个正则表达式表示,匹配一个字符串中出现的 "bar",但它必须是紧跟前面的字符序列中出现的 "foo" 的后面。也就是说,它匹配的是前面是 "foo" 的 "bar"。

在上面的例子中,我们用到了 Lookbehind Assertions 的一种形式:(?<=...),也就是 "positive lookbehind",意思是 "后行断言必须满足括号内的正则表达式"。还有一种形式:(?<!...),也就是 "negative lookbehind",意思是 "后行断言不能满足括号内的正则表达式",这里不做过多解释。

Lookbehind Assertions 用法

下面我们来看一些使用 Lookbehind Assertions 的具体例子。

匹配时间

时钟上的时间通常是以 "hh:mm:ss" 的形式表示。假设我们要从用户输入中识别出分钟数,可以用 Lookbehind Assertions 来进行匹配,这样可以只匹配 ":" 后面的数字(分钟数),而不匹配小时和秒数。

这里我们在正则表达式中使用了 Lookbehind Assertions,匹配的是 ":" 后面的两个数字,也就是分钟数。我们使用了 match() 方法来获取匹配的结果。

匹配域名

在众多的网址中,有些是以 "www" 开头,有些是以 "blog" 开头,假设我们只需要匹配 "blog" 域名下的网址,就可以使用 Lookbehind Assertions 进行匹配。

这里我们使用了 Lookbehind Assertions 进行匹配,匹配规则是以 "http://" 或 "https://" 开头,后面紧跟着 "blog.",然后是一个二级或三级域名,使用 \w+ 来匹配,最后一个 "." 后面也只能是字母。

匹配 emoji

在现代的聊天应用中,Emoji 表情已经成为了越来越流行的表达方式。ES9 的 Lookbehind Assertions 中新增了一个 \p{}. 在 RegEx 中,\p{} 表示 Unicode 属性,这里我们使用 \p{Emoji_Modifier_Base} 可以匹配被标记为 "混合裁切符号基本符号" 的 Emoji。

这里我们使用了 Lookbehind Assertions,在 (?<=\s) 或前面出现了一个空白字符,然后使用了 \p{Emoji_Modifier_Base}\p{Emoji_Modifier} 来匹配 "皮肤颜色修饰符",最后使用了 [\p{Emoji_Presentation}] 来匹配其他 Presentation 格式的 Emoji。

Lookbehind Assertions 总结

在某些场景下,Lookbehind Assertions 可以更容易地进行匹配和捕获,更加简单明了,提高代码可读性和效率。但是,需要注意的是,Lookbehind Assertions 并不是所有浏览器都支持,在使用时需要注意浏览器的版本兼容性。同时,使用时要注意匹配规则的准确性和安全性。

以上就是 Lookbehind Assertions 的介绍和使用方法,这种特性的引入可以让开发者更容易找到所需要的内容,使代码更简洁、明了。

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


纠错
反馈