正则表达式错误:表达式花费了超过250ms的时间执行

时间:2018-11-16 07:52:44

标签: javascript regex

在正则表达式下执行时出现错误

<script>
    var browser_type = Object.keys($.browser)[0];
    alert(browser_type);
</script>

它可能重复了,但我找不到确切的解决方案。

这里是场景。字符串可以接受:

a:它只能在字符串的开头和结尾而不是中间接受双引号/^"?(\w*\d*\s*-*\/*'*)+"?$/

b:以下是仅允许使用的内容:字母数字,正斜杠(“ /”),连字符(-),撇号(')和空格。

当我输入以下文本:Hawaii-Newsletter-Wipppp.pdf引发错误时,您可以在此处进行检查:https://regexr.com/

谁能告诉我我在这里做错了吗?

预先感谢

1 个答案:

答案 0 :(得分:2)

这里的问题是模式中间的量化组内的可选模式,它导致catastrophic backtracking的输入不匹配。

但是,这不是正则表达式的唯一问题,因为它还允许使用不成对的双引号。

要修复正则表达式使用

/^("?)[\w\s\/'-]+\1$/

请参见regex demo

详细信息

  • ^-字符串的开头
  • ("?)-第1组:可选的"
  • [\w\s\/'-]+-1个或多个字母,数字,_,空格,/'-(如果不是_必需,将\w替换为A-Za-z0-9
  • \1-对第1组的后向引用,其匹配值与在第1组中捕获的值相同
  • $-字符串的结尾。