更优雅地使用 ES9 中的正则表达式 lookbehind 断言

阅读时长 3 分钟读完

更优雅地使用 ES9 中的正则表达式 lookbehind 断言

正则表达式是一种强大的文本搜索工具,用于在字符串中匹配特定的模式。ES9中提供了 lookbehind 断言,它允许你搜索前面的文本而不捕获它。这篇文章将带你了解这种新功能,并提供一些实用的示例,帮助你更好地掌握正则表达式。

  1. 什么是 lookbehind 断言?

在正则表达式中,断言是指在搜索特定模式之前或之后,需要满足另一模式的条件。lookbehind 就是一种后向断言,表示搜索模式必须先满足一个匹配模式才能继续向后搜索。

ES9 的 lookbehind 断言分为两种:

① 顺序断言:(?<=pattern) 表示要匹配 的字符串必须在 pattern 匹配的字符串之后。

② 反向断言:(?<!pattern) 表示要匹配的字符串不得在pattern匹配的字符串之后。

  1. 实例讲解

2.1 顺序断言

例如,让我们尝试匹配前面的字符串“JS”,但仅当它在 ex 前面出现时才匹配。传统的正则表达式不能处理这种情况,但我们可以使用 ES9 中的 lookbehind 断言来做到这一点:

该正则表达式将匹配以下字符串:“regex” 和 “text”,但不包括 “JS” 在 ex 之后的所有字符串。

我们还可以使用 lookbehind 来实现更复杂的样式匹配。例如,我们想匹配所有在如下文本中出现但不在两个引号之间的数字:

正常的正则表达式可以使用否定前向斜杠来编写,例如:

但这里的 lookbehind 断言可以使正则表达式更加简洁,如下所示:

其中 (?<!["']) 表示确保之前没有出现单引号或双引号,\d+ 表示匹配一个或多个数字,(?![^"']*["'])表示确保不在引号中。这种方式更易于阅读和理解。

2.2 反向断言

反向断言让查找更加有趣,并且在需要排除某个模式时非常有用。例如,我们想匹配所有不在链接中的 email 地址,并且在 @ 符号前面没有足够的空格。我们可以写出这个正则表达式:

其中,(?<!href=") 确保链接中的 email 地址不匹配,\S+@ 匹配地址中的 @ 符号以及至少一个字符,然后 \S+ 匹配其余的地址。除了 href=" 之外,这个正则表达式将匹配任何其他模式,这是我们想要的。

该正则表达式将匹配以下文本:

但不会匹配此文本:

  1. 总结和注意事项

在 ES9 中使用 lookbehind 断言可以使正则表达式更具可读性、更简洁,并且让复杂的模式匹配更加容易。要注意,浏览器兼容性问题,某些浏览器可能不支持该功能。

通过本文的介绍,相信您已经掌握了工作中使用 lookbehind 断言的技巧,并能更好地应用它们来加速您的开发。

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

纠错
反馈