假设我们有以下正则表达式:
((a(.+?)c ?)+)
这将匹配:
abc acc aac
我想做什么:
((a(.+?)c ?)(a\3c ?)*)
所以我只会匹配
abc abc abc
或
acc acc acc
但不是第2项(abc acc aac)
......但没有反向引用。
基本上,我希望#1(。+?)中的第3个捕获组始终匹配第一场比赛的任何内容。
这可能吗?
为了让事情变得更加有趣,这需要在JavaScript的regexp引擎中运行。
答案 0 :(得分:0)
如果它变化,则无法捕获尾随空格,因为记忆值将在后面的参考中进行字面比较。将变化移到捕获的parens外面会变得简单:
var rx= /(a(.+?)c) ?\1 ?\1/g ;
// tests/demo
"abc abc abc".match(rx) // ["abc abc abc"]
"abc acc abc".match(rx) // null
"abc acc aac".match(rx) // null
"acc acc acc".match(rx) // ["acc acc acc"]
所以,允许可选空格是一些额外的重复字符,但它可以工作。