在 ES9 中,正则表达式的语法新增了 LookBehind 捕获组的支持,使得 JS 的正则表达式更加强大和灵活。本文将详细讲解 RegExp LookBehind 捕获组的正确语法及其示例,以便读者可以更好地掌握这一技术。
什么是 LookBehind 捕获组?
LookBehind 捕获组是一种零宽度断言,它用来匹配某个字符或一组字符之前的位置,而不匹配查找内容中的前缀。这意味着,LookBehind 捕获组不会让查找内容出现偏移,但是它可以用来过滤某些输入。
例如,假设我们要查找一个字符串中所有以 $
结尾,前面是数字的结果,可以使用 LookBehind 捕获组来排除以 $
结尾但并非数字的内容。
正确语法
ES9 的正则表达式语法支持 LookBehind 捕获组,其正确语法如下:
(?<=exp)
其中 exp
是一个正则表达式。这个表达式匹配到的所有字符串都必须出现在捕获组前面(左侧)。注意,LookBehind 捕获组必须满足最长匹配原则。
示例
下面展示一个简单的 RegExp LookBehind 捕获组的例子:
const str1 = "123abc"; const str2 = "456def"; const re = /(?<=\d{3})\w+/; console.log(re.exec(str1)); // ['abc'] console.log(re.exec(str2)); // null
上述例子中,我们定义了一个 re
正则表达式,其查找以三个数字结尾的单词。运行代码后,可以看到 str1
中的 abc
被成功匹配,而 str2
中没有匹配的内容。
此外,还可以使用多个 LookBehind 捕获组来扩展正则表达式匹配的能力:
const str = "mometlxf@gmail.com123456@d.com"; const re = /(?<=\w{5}@)\w+|(?<=com)\w+/g; console.log(str.match(re)); // ['gmail', 'd']
上述例子中,我们定义了一个 re
正则表达式,匹配以邮件地址中 @
后为起点的单词或者以 com
结尾的单词。运行代码后,可以看到只匹配到了 gmail
和 d
两个单词。
总结
RegExp LookBehind 捕获组是 ES9 新增的特性,用于更强大、灵活的正则表达式匹配。使用 LookBehind 捕获组可以实现一些不容易直接匹配的场景,需要我们学习和应用。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/652bc2497d4982a6ebd9ff35