JavaScript`mat`行为

时间:2013-01-03 18:48:35

标签: javascript regex

在我的Chrome控制台中,我尝试了这个:

>  "abcd".match(/(.+)+/)
<  ["abcd", "abcd"]

match返回两个'结果'的事实对我来说是意外和奇怪的。我在Firefox中测试过,结果是一样的(所以我认为它不是任何类型的bug)。

然而,在Python中:

>  re.findall(r'(.+)+', 'abba')
<  ['abba']

我无法解释这一点。发生了什么事?

2 个答案:

答案 0 :(得分:2)

我认为在javascript中,.match给出了组0(整个匹配的表达式没有捕获)以及组1(捕获的组),而python的findAll表现不同 - 显示只捕获的组,而不是整个匹配的部分(第0组)

答案 1 :(得分:2)

根据MDN

  

如果正则表达式不包含g标志,则返回与regexp.exec(string)相同的结果。

来自exec

  

返回的数组将匹配的文本作为第一项,然后   每个捕获括号的一个项目匹配包含   被捕获的文字。

因此返回数组中的第一项是匹配项("abcd"),第二项是唯一的括号组(恰好也是"abcd")。