正则表达式中的 ?= 是什么意思?

106

请问正则表达式中的?=是什么意思?比如在这个表达式中它有什么作用:

(?=.*\d).

9
每日提示:要搜索特殊字符,可以使用 http://symbolhound.com - Simon
3个回答

155

?= 是正向先行断言的一种零宽断言。它表示捕获的匹配必须紧随括号内的内容,但该部分不会被捕获。

你的示例意味着匹配后面需要有零个或多个字符,然后是一个数字(但这部分也不会被捕获)。


1
谢谢Cletus。用普通搜索引擎查找这方面的信息并不容易 :)。 - theraneman
2
此答案已添加到Stack Overflow正则表达式FAQ,位于“环视”一节下。 - aliteralmind
1
请问最后一对括号中的话是什么意思?“但是那部分没有被捕获”。这是否意味着,当我调用一个函数,比如match()时,它会匹配某些字符串,但返回的匹配字符串不包括由?=排除的字符? - scarface
1
@theraneman https://www.google.com/search?q=?= 现在已成为搜索的第二结果 :) - bers

17

(?=pattern) 是一种零宽度的正向先行断言。例如,/\w+(?=\t)/ 匹配一个单词后面跟着一个制表符,但不会包括制表符在 $& 中。


14

以下表达式将查找文件名中扩展名之前的最后一个数字集(不包括点(.))。

'\d+(?=\.\w+$)'

file4.txt将匹配4

file123.txt将匹配123

demo.3.js将匹配3以此类推。


5
一个例子可以更易于理解。礼貌地建议将其作为评论添加,有什么不妥吗? - BobRodes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接