捕获组上的正则表达式子字符串匹配
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。
我有一个高级正则表达式问题(除非我想多了)。
以我对 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。