如果(?:foo)已经存在,正则表达式中的(?= foo)有什么意义?

时间:2011-12-06 11:48:01

标签: javascript regex

我正在阅读Javascript RegExp documentation,并注意到不需要正则表达式功能x(?=y),因为您只需编写x(?:y)即可完成相同的操作。

只有在跟y后才匹配x,并且不会在结果中捕获y。

我错了吗?两者有区别吗?

2 个答案:

答案 0 :(得分:2)

(?=)是“X,通过零宽度正向前瞻”。 (?:)是非捕获组。

根据您正在使用正则表达式的方法(匹配与查找等),与正向前瞻匹配的结果可能不会包含在您的匹配结果中,其中非捕获组仍然是包含在匹配结果的[0]组中。

答案 1 :(得分:0)

是的,你错了。 (?:y)将消耗该字符,而(?=y)仅检查是否存在y但不消耗它,因此可以添加其他检查。