Javascript 正则表达式反向引用的结果正确吗?
我在MongoDB v2.2.4的命令行客户端中使用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反向引用正则表
/([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'),对吗?