详解 ES12 中的正则表达式的断言

正则表达式是计算机科学领域中的一种基础工具,用于匹配文本中的内容。而在 ES12(也称为 ECMAScript 2021)中,正则表达式新增加了一种重要的特性:断言。这一特性能够帮助我们更加灵活地匹配文本内容。

什么是断言?

断言是一种正则表达式的语法结构,通常用于强制需要一些文本内容的前缀或者后缀、或者它们没有对应的前缀或者后缀时进行匹配。在断言中,我们可以使用 (?=?!(?<=(?<! 这四个符号来进行匹配。

在进行断言匹配时,如果断言部分匹配成功,它并不会消耗文本内容。相反,正则表达式将会从它开始的下一个字符继续匹配。

向前查找断言

向前查找断言使用的是 (?= 符号,表示需要在文本中查找匹配该断言的内容,并匹配成功的情况下,该断言所在的位置后面的字符才能被匹配。下面是一个示例:

在上述代码中,通过使用 (?=:) 向前查找断言,我们在匹配数字的过程中避免了匹配数字后面的冒号。

否定向前查找断言

否定向前查找断言使用的是 (?!) 符号,表示需要在文本中查找没有匹配该断言的内容。下面是一个示例:

在上述代码中,通过使用 (?!\S*e\S*) 否定向前查找断言,我们在匹配不带有字符串 'e' 的单词时避免了匹配到 'apple'。

向后查找断言

向后查找断言使用的是 (?<=) 符号,表示需要在文本中查找匹配该断言的内容,并匹配成功的情况下,该断言所在的位置前面的字符才能被匹配。下面是一个示例:

在上述代码中,通过使用 (?<=(\w))\1{2} 向后查找断言,我们成功得到了 'FF' 这个连续重复的十六进制数字串。

否定向后查找断言

否定向后查找断言使用的是 (?<!) 符号,表示需要在文本中查找没有匹配该断言的内容。下面是一个示例:

在上述代码中,通过使用 (?<=\/\/)[^/]+(?=\/[^/]*$) 否定向后查找断言,我们成功地匹配了 URL 的目录路径。

总结

正则表达式的断言是 ES12 中的一个重要特性,能够帮助我们更加灵活地匹配文本内容。在断言中,我们可以使用 (?=?!(?<=(?<! 这四种符号来进行匹配。在实际的应用场景中,我们可以通过结合断言来匹配需要的文本内容。

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


纠错
反馈