Regex 正则表达式模故障?

Regex 正则表达式模故障?,regex,ecmascript-5,regex-lookarounds,Regex,Ecmascript 5,Regex Lookarounds,我正在研究上的奖金水平,目前我正在研究模数问题。使用的正则表达式引擎是我不知道我的浏览器(Firefox34.0)运行哪个版本 基本上,想法是匹配形式的表达 x* % x+ = x* 其中重复的x的数量表示数字。捕获只匹配有效的模运算 到目前为止,我的最佳解决方案如下: ^(?=x+ % (x+) )\1*(x*) % x+ = \2$ 也就是说,我使用一个向前看来获得第二组中的x,尽可能多地匹配该模式,然后获得对剩余部分的反向引用,剩余部分必须是右侧的模式 现在,就这一点而言,它似乎是可行

我正在研究上的奖金水平,目前我正在研究模数问题。使用的正则表达式引擎是我不知道我的浏览器(Firefox34.0)运行哪个版本

基本上,想法是匹配形式的表达

x* % x+ = x*
其中重复的
x
的数量表示数字。捕获只匹配有效的模运算

到目前为止,我的最佳解决方案如下:

^(?=x+ % (x+) )\1*(x*) % x+ = \2$
也就是说,我使用一个向前看来获得第二组中的
x
,尽可能多地匹配该模式,然后获得对剩余部分的反向引用,剩余部分必须是右侧的模式

现在,就这一点而言,它似乎是可行的,但在两种特定情况下它失败了(匹配错误):

xxxxx % xxxxx = xxxxx
xxxxxxxxxxxxxx % xxx = xxxxx
这个特定的regex-golf实现的一个很酷的特性是,它向您显示匹配的字符串部分。真正有趣的是,如果我去掉行尾绑定(即
$
),那么两者的匹配区域都从行首到下面的
^

xxxxx % xxxxx = xxxxx
               ^
xxxxxxxxxxxxxx % xxx = xxxxx
                        ^
这正是我所怀疑的——第一个会吞噬整个第二个
x
组,因此
\2
最终是空的。在第二种情况下,实际结果是2,因此
\2
xx
,这就是所有匹配的结果。但当我加上锚时,比赛就跳到了终点

我的表达适用于以下方面:

xxxxxxxxxxxx % xx = x
xxxxx % xxx = xxxx
其中结果也分别为0和2

怎么了?我的表达逻辑中是否遗漏了一个基本问题



我知道发生了什么。正则表达式引擎可以选择匹配
\1
模式的次数少于它可能选择的次数,并且在这两种情况下都允许它扩展
\2
匹配,使其等于rhs。现在要想办法强迫它变得贪婪。。。也许再向前看一次?欢迎您提出建议。

问题是2美元可能比1美元多

您可以通过简单的消极前瞻来解决它:()

或()

另一个没有查找功能的选项是使用,但JavaScript中根本不支持该选项:()


组2限制组1可以匹配的行为。
^(?=x+ % (x+) )\1*(?!\1)(x*) % x+ = \2$
\b(x*)\1*(?!\1)(x+) % \1\b = \2\b
\b(x*)\1*+(x+) % \1\b = \2\b