以下正则表达式^[0-9A-Za-z]+(\s)*(-?(\s)*[0-9A-Za-z]+)*$
匹配大多数情况,例如"dsffsd-fdsfds-dasda"
,但是当我将字符串匹配为"dsffsd-fdsfds-dasda-dasdas--dasdas-dsfs"
我在firebug中得到错误时说正则表达式太复杂。
任何帮助将不胜感激, 提前致谢
答案 0 :(得分:3)
正则表达式属于Catastrophic Backtracking,这就是出现此错误的原因。请注意,您的字符串与模式不匹配,因为该模式不允许使用两个连字符:--
。
我能够将模式简化为:
/^\w(?:-?\s*\w)*$/
如果我这样做了,这个模式只允许一种匹配每个字符串的方式,所以不应该遇到同样的问题。
如果您不需要这样的约束,您可以非常简单地使用模式,例如/^[\w\s\-]*$/
请注意,\w
也匹配下划线,但如果需要,应该很容易纠正。