为什么regex需要很长时间来计算某个值
Why does regex take too long to evaluate for certain value?
下面是我的正则表达式:
(https?:'/'/)([a-zA-Z]{2,6}'.)*((?!.*[|!{}[']^"*;]).)+('.*)([a-zA-Z0-9'.'-'/':'?&=_%#]+)+([&|?])+$
它是用来验证一个URL的负前瞻性,以允许来自其他语言的字符。
下面是我在http://regex101.com/#javascript:
测试时的结果For -
观察http://server.com/path?id=1111111 - NO MATCH
http://server.com/path?id=11111111 - TIMEOUT表达式计算时间过长。
http://server.com/path?id=111111111111111111111&——匹配
:
当查询参数的值超过一定长度时,将超时。
但是对于一个匹配的URL,参数值的长度并不重要。
为什么超过一定长度会超时?我需要修改正则表达式的哪一部分?
注意:RegEx要求URL以?
或&
结尾
提前感谢。
编辑:我需要的是,一个正则表达式来验证所有标准(例如www.xyz.com或者someip:port后面跟着路径参数和/或查询参数,等)的url。它也应该支持其他语言的字符。使用额外的验证来强制URL以
?
或&
.
([a-zA-Z0-9'.'-'/':'?&=_%#]+)+
中的(…+)+
导致灾难性的回溯。去掉一个加号应该会有帮助。
这是我能想到的最好的:
'b(['d'w'.'/'+'-'?':]*)((ht|f)tp(s|)':'/'/|['d'd'd|'d'd]'.['d'd'd|'d'd]'.|www'.|'.tv|'.ac|'.com|'.edu|'.gov|'.int|'.mil|'.net|'.org|'.biz|'.info|'.name|'.pro|'.museum|'.co)(['d'w'.'/'%'+'-'='&'?':'''"''','|'~';]*)'b
JSFiddle:(我用别人的演示来测试:)
http://jsfiddle.net/3AE9p/当然这是不完整的,但它是非常接近你想要和期望!
相关文章:
- 为什么我的上下文选择器和.buttonset()在ie中花费了这么长时间
- 谷歌地图需要很长时间才能在ie11中渲染
- 有没有一种方法可以检查javascript以毫秒为单位执行一个函数需要多长时间
- 我一直收到的控制台警告是什么?推迟长时间运行的计时器任务以提高滚动的流畅性
- 为什么这个代码不起作用?我花了很长时间试图弄清楚这一点
- 如何在长时间执行JavaScript期间显示微调器
- 长时间轮询:每个浏览器中的通知
- angularjs计算开始时间和当前时间之间的时间差
- 完整日历:如何支持一次点击和不长时间点击
- 如何使用 javascript 停止对 asp.net 进行正在进行的回发(长时间运行的执行)
- 为什么这个 AJAX 调用需要这么长时间
- 为什么这个正则表达式需要这么长时间才能执行
- 如何修复长时间运行的脚本
- JS-鼠标点击的计算持续时间
- Node.js中的垃圾收集作用域-变量将保持设置状态多长时间
- javascript秒表限制最长时间
- 长时间运行的脚本IE与Chrome/Firefox
- 有没有一种方法可以在长时间运行的JavaScript操作之前强制回流
- 为什么regex需要很长时间来计算某个值
- 防止浏览器冻结和崩溃长时间计算