需要帮助JavaScript正则表达式:正则表达式太复杂

时间:2011-08-27 14:51:45

标签: javascript regex

以下正则表达式^[0-9A-Za-z]+(\s)*(-?(\s)*[0-9A-Za-z]+)*$匹配大多数情况,例如"dsffsd-fdsfds-dasda",但是当我将字符串匹配为"dsffsd-fdsfds-dasda-dasdas--dasdas-dsfs"我在firebug中得到错误时说正则表达式太复杂。

任何帮助将不胜感激, 提前致谢

1 个答案:

答案 0 :(得分:3)

正则表达式属于Catastrophic Backtracking,这就是出现此错误的原因。请注意,您的字符串与模式不匹配,因为该模式不允许使用两个连字符:--

我能够将模式简化为:

/^\w(?:-?\s*\w)*$/

如果我这样做了,这个模式只允许一种匹配每个字符串的方式,所以不应该遇到同样的问题。
如果您不需要这样的约束,您可以非常简单地使用模式,例如/^[\w\s\-]*$/ 请注意,\w也匹配下划线,但如果需要,应该很容易纠正。