我有一个高级正则表达式问题(除非我对此过分考虑)。
根据我对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的受限引擎吗?
答案 0 :(得分:2)
以下正则表达式可以做到这一点:
P.*(.).*: D:\1
.*(.).*
将匹配一个或多个字符,并捕获其中一个。
如果捕获的字符与D:
之后的字符匹配,则正则表达式匹配。
如果捕获的字符不匹配,则回溯将确保使用其他捕获的字符再次尝试,直到尝试了所有组合。
有关运行示例,请参见regex101.com。