在javascript中了解正则表达式背后的正面看法

时间:2016-07-06 08:48:25

标签: javascript regex

嘿伙计们我刚刚在SO HERE 上阅读了这个问题,并且遇到了以下正则表达式:

(?<=:)(.*?)(?=\/|$)

现在我想知道这段正则表达式到底在做什么(?<=:)?有人可以解释一下吗?

如果我在regex101.com上查看正则表达式,我会得到以下内容:

  

(?&lt; = :)正面观察 - 断言下面的正则表达式可以   匹配:匹配字符:字面意思。

现在我正在学习正则表达式,我明白如果我有以下内容:

(?:car)

它基本上意味着一个非捕获组,但现在(?&lt; = :)的含义是什么?有人可以用什么方式解释这有用吗?

3 个答案:

答案 0 :(得分:3)

更新:首先是第一件事。 Javascript不支持Lookbehinds。

[2018年4月23日] Javascript现在支持Lookbehinds。请参阅提案here

lookbehinds的解释

我将用一个类比来解释这一点。假设你站在面向前方的某个地方。现在你想看看你背后的东西。

那你做什么?

你向后移动整个身体180度> 而不改变你的位置 并观察那里有什么。

这是有些类似于。

的后视
  

您目前处于匹配文本的某个位置(这就像面向前方),您希望看到背后的内容。

     

Lookbehind是零宽度意味着它不会消耗任何与类似的字符串,您希望在不改变位置的情况下看到背后的内容

因此,使用正则表达式(?<=:)abc,您基本上是在abc之前找到:所有位置abc

记得:刚刚检查过,因为zero-width的{​​{1}}断言属性而没有存储在任何地方

注意

这只是一个松散耦合的类比,可以更好地理解和可视化。实际上,在每个位置都会向后检查look(aheads|behinds)的存在,就像字符串:一样(下面的空格是为了清晰

ab:abc

注1

大多数编程语言的正则表达式库不支持变量/ infinte宽度lookbehind,除了很少像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. .NET python库等。所以使用regex等将给出一个错误。

答案 1 :(得分:1)

仅当Positive lookbehind组内的内容匹配时,

positive lookbehind才会匹配。 你是对的,在大多数情况下,使用non capturing group的行为都是一样的。

但是有区别:

答案 2 :(得分:1)

Javascript不支持Lookbehind。

基本上,lookbehind用于验证某些东西是否可以匹配 - 但它不会被添加到最终结果中。所以,例如,如果你想匹配数字包围的abc,但你只想要abc,并且你的正则表达式支持外观,你可以编写类似于:(?<=[0-9])(abc)(?=[0-9])的内容。这意味着:“我想要abc,但只有在它跟随并在数字之前。”

在您的问题示例中,它表示:“匹配:/之间的所有内容”