Javascript 带backref的正则表达式范围
几天前,作为regex高尔夫游戏的一部分,我的任务是构造一个regex,它匹配严格按字母顺序排列的字符串(允许重复)。例如,它应该匹配Javascript 带backref的正则表达式范围,javascript,regex,Javascript,Regex,几天前,作为regex高尔夫游戏的一部分,我的任务是构造一个regex,它匹配严格按字母顺序排列的字符串(允许重复)。例如,它应该匹配 bet fin ghost accjkkpppz 但不应该匹配 aghast polonium rhesus qispeha 分别在“a”、“o”、“h”和“i”上失败 我第一次使用了^a*b*c*d*e*f*g*h*I*j*k*l*m*n*o*p*q*r*s*t*u*v*w*x*y*z*$,但使用backref可以得到一个更短的解决方案: ^((.)(?=
bet
fin
ghost
accjkkpppz
但不应该匹配
aghast
polonium
rhesus
qispeha
分别在“a”、“o”、“h”和“i”上失败
我第一次使用了^a*b*c*d*e*f*g*h*I*j*k*l*m*n*o*p*q*r*s*t*u*v*w*x*y*z*$
,但使用backref可以得到一个更短的解决方案:
^((.)(?=[\1-z]|$))+$
这个正则表达式应该找到一个字符,向前看,看到一个字符>=它或工作的结尾,然后重复
<>但是,我把中间的ReRef和范围挂起来了,这似乎与我经历过的任何测试都不起作用:
[\1-z]
有没有办法在某个范围内使用backreference?JavaScript正则表达式实现应该给出的官方错误是:
JavaScript不支持\1
对于-
所以基本上,它认为你是在试图逃避数字1
,然后它认为连字符也是文字
由于需求的特殊性,我认为您的第一个正则表达式必须满足。不,您不能在字符类中使用反向引用。此外,将正则表达式与JS结合使用并不是高尔夫运动的“最佳”选择。与PCRE、perl或.NET相比,JS中的正则表达式的风格非常有限……如果我错了,请纠正我,但是better
不应该匹配,因为在t
之后有e
和r
。啊,是的。真尴尬。我将为您提供严格的示例,您可以使用。当然,它不会适用于所有情况,但适用于特定的情况,如果高尔夫有特定的测试案例要通过的话。事实上,这些只是我提出的与一般情况相匹配的例子。