0

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

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

match返回两个“结果”的事实对我来说是出乎意料和奇怪的。我在 Firefox 中进行了测试,结果是一样的(所以我认为这不是任何类型的错误)。

但是,在 Python 中:

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

我无法解释这一点。这是怎么回事?

4

2 回答 2

2

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

于 2013-01-03T18:52:53.083 回答
2

根据MDN

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

exec

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

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

于 2013-01-03T18:56:19.447 回答