ES9 中新增的 RegExp Lookbehind
前言
在 JavaScript 中,正则表达式一直是做一些字符串匹配的好工具,它可以帮助我们使用一些规则快速地过滤和匹配字符串。在 ECMAScript 2018 中,新增了一项特性:RegExp Lookbehind,正则表达式后行断言,这项特性为正则表达式提供了更多的强大功能。在本篇文章中,我们将详细讨论这项新特性,探讨它的学习和指导意义,并提供示例代码供读者参考。
- RegExp Lookbehind 介绍
首先我们需要知道什么是 Lookbehind,它是指当匹配一个字符串时,匹配器不仅要匹配子字符串,还要检查子字符串之前的内容。简单地说,就是主要匹配字符串之前的字符串。
Lookbehind 又可分为零宽度正回顾和零宽度负回顾。零宽度正回顾指匹配的前面是某个规定的元字符,而零宽度负回顾则恰恰相反,它必须要保证要匹配的字符串前面不存在某个规定的元字符。
- Lookbehind 的使用
2.1 零宽度正回顾
使用 (?<=...) 进行零宽度正回顾的匹配,表示匹配当前位置之前紧随的子字符串。假设我们要匹配 "123beautiful" 字符串中 "beautiful" 前面的 "123",那么正则表达式可以写成:
const str = "123beautiful"; const reg = /(?<=\d{3})beautiful/; console.log(str.match(reg)); // output: ["beautiful"]
上述正则表达式中,(?<=\d{3}) 表示匹配当前位置之前的三位数字,而在这之后的字符串 "beautiful" 才是我们需要匹配的字符串。
2.2 零宽度负回顾
使用 (?<!...) 进行零宽度负回顾的匹配,表示在当前位置之前不存在某个规定的元字符。接下来,让我们看一个例子。假设我们要从字符串 "beautiful123" 中抽取 "beautiful" 但是要排除匹配 "123" 的情况,那么正则表达式可以写成:
const str = "beautiful123"; const reg = /(?<![0-9])beautiful/; console.log(str.match(reg)); // output: ["beautiful"]
上述正则表达式中,(?<![0-9]) 表示在当前位置之前的内容中不能是数字 0-9,只有在满足条件的情况下才会匹配当前位置之后的字符串 "beautiful"。
- 总结
正则表达式作为一种重要的字符串匹配工具,在 JavaScript 中受到了广泛的应用,而在 ECMAScript 2018 中新增的 RegExp Lookbehind 为正则表达式提供了更强大的功能,特别是 Lookbehind 的零宽度正回顾和零宽度负回顾,使得我们可以更加精细地完成一些字符串匹配和过滤的任务。
本篇文章针对 ES9 中新增特性 "RegExp Lookbehind" 做了详细的介绍,总结了它的使用情况,并提供了示例代码供读者参考。相信读者在掌握这项新技能后,可以为自己的开发工作带来更多的便利,提升开发效率。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/654d922b7d4982a6eb6f7e5d