静态捕获组?

时间:2014-02-14 01:21:40

标签: javascript regex

假设我们有以下正则表达式:

((a(.+?)c ?)+)

这将匹配:

abc acc aac

我想做什么:

((a(.+?)c ?)(a\3c ?)*)

所以我只会匹配

abc abc abc

acc acc acc

但不是第2项(abc acc aac)

......但没有反向引用。

基本上,我希望#1(。+?)中的第3个捕获组始终匹配第一场比赛的任何内容。

这可能吗?

为了让事情变得更加有趣,这需要在JavaScript的regexp引擎中运行。

1 个答案:

答案 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"]

所以,允许可选空格是一些额外的重复字符,但它可以工作。