解读 ES9 的正则表达式扩展(RegExp Lookbehind Assertions)

阅读时长 3 分钟读完

在 ECMAScript 2018 标准(ES9)中,正则表达式得到了强化,其中一个新增的功能是查找(Lookbehind)断言(Assertion),可以让我们在正则表达式匹配时向前查找。

什么是 Lookbehind 断言?

Lookbehind 断言是一种正则表达式的特殊组成部分,用于在匹配某个字符时,从它之前的位置开始匹配,而不是从当前位置向后进行匹配。

这种特殊的匹配方式可以让我们实现更为复杂的正则表达式匹配,例如查找某个字符前面是否有另一个字符并判断其特定的位置。Lookbehind 断言可以分为两种类型:

  1. 正向查找(Positive Lookbehind Assertions):只有当前位置之前有指定的字符串时,才匹配成功;
  2. 负向查找(Negative Lookbehind Assertions):只有当前位置之前没有指定的字符串时,才匹配成功。

Lookbehind 断言的语法

Lookbehind 断言的语法如下:

其中,pattern 表示要匹配的字符串,sub-pattern 表示要查找的字符。

另外,如果使用了 Lookbehind 断言,需要注意以下限制:

  1. Lookbehind 断言必须满足固定长度,也就是说,无法使用通配符或量词;
  2. Lookbehind 断言必须在当前位置的左边查找,也就是说,只能用于正则表达式中的第二个组成部分。

使用 Lookbehind 断言

下面,我们通过一些示例代码来演示在实际中如何使用 Lookbehind 断言。

正向查找示例

假设我们要查找一个字符串中所有的“CSS”单词,并且只匹配它前面为数字、字母或下划线的情况。这时,我们可以使用如下的正则表达式:

在上面的例子中,我们使用正向查找 (?<=) 来判断要匹配的字符串前面是否为字母或数字,这样可以避免匹配到 CSS 单词前面的空格或其他字符。

负向查找示例

接下来,我们来演示一下负向查找的情况。假设我们要查找一个字符串中所有不以“#”打头的 URL,这时我们可以使用如下的正则表达式:

在上面的例子中,我们使用负向查找 (?<!) 来判断 URL 前面是否以“#”打头,这样可以避免匹配到以“#”打头的 URL。

总结

Lookbehind 断言为我们提供了一种新的方法来查找字符串,可以更加准确地匹配指定位置的字符。通过本篇文章的学习,我们可以开始使用 Lookbehind 断言来构建更为复杂的正则表达式,丰富前端开发中的工具库。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64506889980a9b385b9753fa

纠错
反馈