Javascript 正则表达式反向引用的结果正确吗?

Javascript 正则表达式反向引用的结果正确吗?,javascript,python,regex,mongodb,Javascript,Python,Regex,Mongodb,我在MongoDB v2.2.4的命令行客户端中使用Javascript运行以下正则表达式反向引用: /([AB])([AB])/([BA”) [“BA”、“B”、“A”] 我原以为应该得到[“B”,“A”],但在数组的开头我得到了一个额外的元素“BA”。我在Python中尝试了相同的正则表达式反向引用,返回的结果如下所示: >>re.search('([AB])([AB]),'BA').groups() (‘B’、‘A’) 那么,我可以说MongoDB中从Javascript反向引用正则表

我在MongoDB v2.2.4的命令行客户端中使用Javascript运行以下正则表达式反向引用:

/([AB])([AB])/([BA”)
[“BA”、“B”、“A”]
我原以为应该得到[“B”,“A”],但在数组的开头我得到了一个额外的元素“BA”。我在Python中尝试了相同的正则表达式反向引用,返回的结果如下所示:

>>re.search('([AB])([AB]),'BA').groups()
(‘B’、‘A’)

那么,我可以说MongoDB中从Javascript反向引用正则表达式的结果是错误的吗

在JavaScript(和许多其他正则表达式引擎)中,组0被视为整个输入,而匹配组从1开始。在Python的re模块中,组从0开始,因为整个字符串是您的输入。

在JavaScript(和许多其他正则表达式引擎)中,组0被视为整个输入,而匹配组从1开始。在Python的re模块中,组从0开始,因为整个字符串都是您的输入。

MongoDB结果包括整个匹配字符串或组0,以及组1和2

Python
.groups()
方法仅返回捕获的组。
.group()
方法在没有参数的情况下也将返回组0:

>>> re.search('([AB])([AB])', 'BA').groups()
('B', 'A')
>>> re.search('([AB])([AB])', 'BA').group()
'BA'
>>> re.search('([AB])([AB])', 'BA').group(1)
'B'
>>> re.search('([AB])([AB])', 'BA').group(2)
'A'
>>> re.search('([AB])([AB])', 'BA').group(0)
'BA'
这是:

返回包含匹配的所有子组的元组,从1到模式中的组数

对于
.group()
方法:

返回匹配项的一个或多个子组。如果只有一个参数,则结果是一个字符串;如果有多个参数,则结果是一个元组,每个参数有一个项。如果没有参数,group1默认为零(返回整个匹配)

请注意,表达式中没有反向引用。相反,反向引用将如下所示:

'([AB])\1'
其中,
\1
指的是它前面的捕获组。反向引用将只匹配被引用组匹配的完全相同的字符

演示:


其中
a\u或
是组名。

MongoDB结果包括整个匹配字符串或组0,以及组1和组2

Python
.groups()
方法仅返回捕获的组。
.group()
方法在没有参数的情况下也将返回组0:

>>> re.search('([AB])([AB])', 'BA').groups()
('B', 'A')
>>> re.search('([AB])([AB])', 'BA').group()
'BA'
>>> re.search('([AB])([AB])', 'BA').group(1)
'B'
>>> re.search('([AB])([AB])', 'BA').group(2)
'A'
>>> re.search('([AB])([AB])', 'BA').group(0)
'BA'
这是:

返回包含匹配的所有子组的元组,从1到模式中的组数

对于
.group()
方法:

返回匹配项的一个或多个子组。如果只有一个参数,则结果是一个字符串;如果有多个参数,则结果是一个元组,每个参数有一个项。如果没有参数,group1默认为零(返回整个匹配)

请注意,表达式中没有反向引用。相反,反向引用将如下所示:

'([AB])\1'
其中,
\1
指的是它前面的捕获组。反向引用将只匹配被引用组匹配的完全相同的字符

演示:


其中
a\u或
是组名。

请发布文本而不是图像。此外,没有反向引用。请发布文本而不是图像。此外,也没有反向引用。值得一提的是,我认为Python的方法更有意义,我认为旧的行为已经存在了这么长时间,因为正则表达式对大多数人来说像是黑魔法,所以破坏与它们相关的代码是非常可怕的。值得一提的是,我认为Python的方法更有意义,我认为旧的行为已经存在了这么长时间,因为正则表达式对大多数人来说像是黑魔法,因此,破坏与它们相关的代码是非常可怕的。感谢您对反向引用的解释。在演示中,如果我们不想使用反向引用,我们还可以将正则表达式编写为re.search(r'([AB]){2}',BB'),对吗?感谢您对反向引用的解释。在演示中,如果不想使用反向引用,我们还可以将正则表达式编写为re.search(r'([AB]){2}','BB'),对吗?