Javascript 在PEG.js中测试所有可选模式

Javascript 在PEG.js中测试所有可选模式,javascript,regex,peg,pegjs,Javascript,Regex,Peg,Pegjs,我想使用PEG.js识别几种不同格式的数字: number = integer / real / (integer/real) '^' (integer/real) / (integer/real) '^^' (integer/real) real = [0-9]+ '.' [0-9]* / [0-9]* '.' [0-9]+ integer = [0-9]+ 如果在备选方案序列的前面有部分匹配,PEG.js不会寻找备选方案。大多数数字以整数开头,如果不是,则以实数开头。我如何重写它,以便

我想使用PEG.js识别几种不同格式的数字:

number = integer
/ real
/ (integer/real) '^' (integer/real)
/ (integer/real) '^^' (integer/real)

real = [0-9]+ '.' [0-9]*
/ [0-9]* '.' [0-9]+

integer = [0-9]+

如果在备选方案序列的前面有部分匹配,PEG.js不会寻找备选方案。大多数数字以整数开头,如果不是,则以实数开头。我如何重写它,以便它单独测试每个备选方案?(我对将规则组合成更少的规则不感兴趣。)

首先尝试匹配更具体的表达式(因为规则之间存在重叠,所以您希望PEG首先更具体地匹配以防止部分匹配):


很抱歉,我的示例没有很好地解决这个问题,所以我必须更新它。这种方法也适用于扩展示例吗?谢谢。我原以为整数或实数是第一条规则的部分匹配,但现在我意识到,如果模式部分匹配输入,那么它只是部分匹配,而不是相反+1在我使用PEG.js的(有限的)经验中,这个问题已经发生了很多次。每当使用<代码> /<代码>时,考虑规则的顺序是很重要的。
number = ( real / integer ) '^' ( real / integer )
/  ( real / integer ) '^^' ( real / integer )
/ real
/ integer