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

Regex substring matching on capture group

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

以我对 Regex 的基本了解,在字符串中进一步匹配静态捕获组是微不足道的。

P(.): D:          

正确匹配

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: | P(.)(.): D:(|) | P(.)(.)(.): D:(||) 

但我什至不能使这个笨拙的解决方案在 Javascript Regex 中工作。

有没有一种优雅、正确的方法来做到这一点?用Javascript有限的引擎能做到吗?

下面的正则表达式可以做到:

P.*(.).*: D:

.*(.).* 将匹配一个或多个字符,捕获其中一个。

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

如果捕获的字符不匹配,回溯将确保它再次尝试使用不同的捕获字符,直到尝试了所有组合。

有关 运行 示例,请参阅 regex101.com