Regex 捕获组上的正则表达式子字符串匹配

Regex 捕获组上的正则表达式子字符串匹配,regex,regex-group,Regex,Regex Group,我有一个高级正则表达式问题(除非我想得太多) 根据我对正则表达式的基本知识,在字符串中进一步匹配静态捕获组并不重要 P(.): D:\1 正确匹配 Pb: Db Pa: Da 和(正确)不匹配 Pa: D:b 到目前为止还不错。然而,我需要捕获的是P后面的一组[a-z]+并匹配一个字符。因此,这些也应匹配: Pabc: D:c Pabc: D:a Pba: D:b Pba: D:a 但不是 Pabc: D:x Pba: D:g 我开始按照这样的方式编写单独的模式(为

我有一个高级正则表达式问题(除非我想得太多)

根据我对正则表达式的基本知识,在字符串中进一步匹配静态捕获组并不重要

P(.): D:\1          
正确匹配

Pb: Db
Pa: Da
和(正确)不匹配

Pa: D:b
到目前为止还不错。然而,我需要捕获的是P后面的一组[a-z]+并匹配一个字符。因此,这些也应匹配:

Pabc: D:c
Pabc: D:a
Pba: D:b
Pba: D:a
但不是

Pabc: D:x
Pba: D:g

我开始按照这样的方式编写单独的模式(为清晰起见,在交替处添加了空格):

但我无法在Javascript正则表达式中使用这种笨拙的解决方案


有没有一种优雅、正确的方法可以做到这一点?可以用Javascript有限的引擎完成吗?

以下正则表达式可以完成:

P.*(.).*: D:\1
*(.).*
将匹配一个或多个字符,并捕获其中一个字符

如果捕获的字符与
D:
之后的字符匹配,则正则表达式匹配

如果捕获的角色不匹配,回溯将确保使用不同的捕获角色重试,直到所有组合都已尝试


请参阅运行示例。

以下正则表达式将执行此操作:

P.*(.).*: D:\1
*(.).*
将匹配一个或多个字符,并捕获其中一个字符

如果捕获的字符与
D:
之后的字符匹配,则正则表达式匹配

如果捕获的角色不匹配,回溯将确保使用不同的捕获角色重试,直到所有组合都已尝试


参阅运行示例。

您所发布的两个模式有多个尾随空间,而您试图匹配的文本可能不考虑修复(为清晰起见而添加在交替的空间中)。而你试图匹配的文本可能不考虑修复(为了清楚而在交替中添加的空间)见安德烈亚斯。回答得好!丹克·肖恩,安德烈亚斯。回答得好!