理解javascript中正则表达式背后的积极外观
嘿,伙计们,我刚刚在SO上读到这个问题,遇到了以下正则表达式:理解javascript中正则表达式背后的积极外观,javascript,regex,Javascript,Regex,嘿,伙计们,我刚刚在SO上读到这个问题,遇到了以下正则表达式: (?<=:)(.*?)(?=\/|$) 它基本上意味着一个非捕获组,但是现在,只有当正查找组中的内容匹配时,才匹配(?正查找组。 您是对的,在大多数情况下,使用非捕获组的行为都是一样的 但有一点不同: 将捕获foobar 将仅捕获条(如果前面是foo) 正查找仅当正查找组中的内容匹配时才会匹配。 您是对的,在大多数情况下,使用非捕获组的行为都是一样的 但有一点不同: 将捕获foobar 将仅捕获条(如果前面是foo) J
(?<=:)(.*?)(?=\/|$)
它基本上意味着一个非捕获组,但是现在,只有当
正查找组中的内容匹配时,才匹配(?正查找组。
您是对的,在大多数情况下,使用非捕获组
的行为都是一样的
但有一点不同:
- 将捕获
foobar
- 将仅捕获
条
(如果前面是foo
)
正查找
仅当正查找
组中的内容匹配时才会匹配。
您是对的,在大多数情况下,使用非捕获组
的行为都是一样的
但有一点不同:
- 将捕获
foobar
- 将仅捕获
条
(如果前面是foo
)
Javascript不支持查找
基本上,lookbehind用于验证某些内容是否可以匹配,但不会添加到最终结果中。因此,例如,如果您想要匹配abc,但只需要abc,并且您的正则表达式风格支持lookarounds,那么您可以编写如下内容:
(?Javascript不支持lookbehind)
基本上,lookbehind用于验证某些内容是否可以匹配,但它不会被添加到最终结果中。因此,例如,如果您想要匹配abc,用数字包围,但您只需要abc,并且您的regex风格支持lookarounds,您可以编写如下内容:(?更新:第一件事。Javascript不支持lookbehind。
[2018年4月23日]现在Javascript支持lookbehind。请参阅提案
外观落后的解释
我会打个比方来解释这一点。假设你站在某个面向前方的地方。现在你想看看身后是什么
那你是做什么的?
你向后移动你的头(可能整个身体180度)而不改变你的位置,然后观察那里有什么
这有点类似于
您当前处于要匹配的文本的某个位置(这类似于朝前方向),您希望看到后面的内容
Lookbehind为零宽度意味着它不会使用任何类似于的字符串。您希望在不改变位置的情况下查看后面的内容
因此,使用regex(?更新:第一件事。Javascript不支持lookbehind。
[2018年4月23日]现在Javascript支持lookbehind。请参阅提案
外观落后的解释
我会打个比方来解释这一点。假设你站在某个面向前方的地方。现在你想看看身后是什么
那你是做什么的?
你向后移动你的头(可能整个身体180度)而不改变你的位置,然后观察那里有什么
这有点类似于
您当前处于要匹配的文本的某个位置(这类似于朝前方向),您希望看到后面的内容
Lookbehind为零宽度意味着它不会使用任何类似于的字符串。您希望在不改变位置的情况下查看后面的内容
所以使用regex(?在Javascript中不支持Look behinds!有。在Javascript中不支持Look behinds!有。我喜欢这个类比(+1):)您可能想补充一点,与lookaheads相反,大多数正则表达式风格不支持无限宽lookbehinds。@rock321987很好,现在我有点理解了积极lookbehinds的重要性。所以PHP确实支持积极lookbehinds,但JS不支持。我喜欢这个类比(+1):)您可能想补充一点,与lookaheads相反,大多数正则表达式并不支持无限宽lookbehinds。@rock321987很好地感谢现在我有点理解了积极lookbehinds的重要性。所以PHP确实支持积极lookbehinds,但JS不支持。顺便说一句:大多数正则表达式支持固定宽度lookbehinds,而只有极少数支持infinte-width-lookbehinds(.net-does)。因此(?Oops,抱歉。我的不好。正如旁注:大多数正则表达式风格支持固定宽度的lookbehinds,而只有极少数支持infinte-width-lookbehinds(.net-does)。因此(?Oops,抱歉。我的不好。
(?:car)
a b : a b c
^
When this is the position of checking, a is matched with :
a b : a b c
^
When this is the position of checking, b is matched with :
a b : a b c
^
When this is the position of checking, : is matched with :
As they match, now abc of regex is matched against string abc.
If successful match is found.