2011-06-14 141 views
1

(?:)(?=)之间的区别我假定第一个返回匹配函数中匹配的文本(但不适用于子表达式组号,但不知道是否我在预先感谢:-)我知道他们用于什么,但我不知道他们如何行事不同。也可以重复字符应用于前瞻断言?Javascript/Perl正则表达式

回答

2

所以关于这两个构造的事情是不要返回任何东西。 (?: ...)的使用方式与普通(...)相同,只是其结果未被捕获并且未返回。在Perl中,我相信Javascript,由于Regex引擎无需记住匹配的子字符串,因此可以提高性能。

(?=)的想法是不同的。你可以将任何一个正则表达式的组件认为是“吃掉”匹配字符串的一些子集。但不是(?=)。另一种想法是,(?=)匹配在(?=)本身匹配的字符串完全相同的地方,而不是在它像一个正常组结束后匹配。

+0

当你说不回来时,你的意思是什么? – rubixibuc 2011-06-14 03:02:39

+0

这是捕获'()'和非捕获'(?:)'组之间的区别。使用非捕获功能后,您无法找到源文件中匹配该特定子模式的文本,只有在整个模式匹配的情况下它必须匹配。 – Dan 2011-06-14 03:27:51

3

(?:)创建一个组,不会被捕获,即存储在任何后向引用中。它通常用在你需要一个组的地方,但不关心它在一个捕获组中。这可以提高性能并清理反向引用。

(?=)是一个超前的断言。它被用来寻找一些东西,而不是消耗任何角色作为匹配。