首页 > 解决方案 > 正则表达式错误:表达式执行时间超过 250 毫秒

问题描述

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

/^"?(\w*\d*\s*-*\/*'*)+"?$/

它可能会重复,但我无法找到确切的解决方案。

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

" "a:它只能在字符串的开头和结尾接受双引号,而不是介于两者之间。

b:这里只允许:字母数字、正斜杠(“/”)、连字符(-)、撇号(')和空格。

当我输入此文本时:Hawaii-Newsletter-Wipppp.pdf 它向我抛出错误,您可以在此处查看:https ://regexr.com/

谁能告诉我我在这里做错了什么。

提前致谢

标签: javascriptregex

解决方案


这里的问题是模式中间的量化组内的可选模式,它会导致输入不匹配的灾难性回溯

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

修复正则表达式使用

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

查看正则表达式演示

细节

  • ^- 字符串的开始
  • ("?)- 第 1 组:可选"
  • [\w\s\/'-]+- 1 个或多个字母、数字、_、空格、/'-如果_不需要,请替换\wA-Za-z0-9
  • \1- 对组 1 的反向引用与捕获到组 1 中的值匹配
  • $- 字符串结束。

推荐阅读