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

时间:2019-03-03 23:15:06

标签: regex regex-group

我有一个高级正则表达式问题(除非我对此过分考虑)。

根据我对Regex的基本了解,将静态捕获组匹配到字符串中的后面很简单。

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 | P(.)(.): D:(\1|\2) | P(.)(.)(.): D:(\1|\2|\3) 

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

是否有一种优雅,正确的方法来做到这一点?可以使用Javascript的受限引擎吗?

1 个答案:

答案 0 :(得分:2)

以下正则表达式可以做到这一点:

P.*(.).*: D:\1

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

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

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

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