为什么这个正则表达式执行缓慢
Why does this regex execute slowly?
所以我有一个正则表达式来标识URL:
/^(https?:'/'/)?(['da-z'.-]+)'.([a-z'.]{2,6})(['/'w '.-]*)*'/?$/
但是,当我使用它来识别用户输入的URL时,简单地使用.test
会大大减慢页面速度,尽管根据MDN,它应该比exec更快。我是否使用了一种过时的测试正则表达式的方法?有没有我不知道的更快的方法?或者我的正则表达式真的很长很复杂?
这是一个JSFiddle。
编辑:Chrome 24版需要20.7秒Internet Explorer 9 中的1:48.5
因此,regex似乎只在处理已发布信息的url时滞后,例如在jsfiddle url Product.aspx?Item=N82E16811139009
中。当url的这一部分被删除时,regex将正确、快速地预成型。
但是,从(['/'w '.-]*)*
中删除最后一个星号会导致正则表达式预型不正确,因此不能选择使用(['/'w '.-]*)
。
相反,为了让regex能够处理带有发布信息的url,最后一部分需要删除:
/^(https?:'/'/)?(['da-z'.-]+)'.([a-z'.]{2,6})(['/'w '.-]*)*'/?$/
至
/^(https?:'/'/)?(['da-z'.-]+)'.([a-z'.]{2,6})(['/'w '.-]*)*/
这是因为regex的设计目的是检测url末尾的文件类型或反斜杠,而不是问号和发布的信息。删除最后一部分可以修复问题,regex可以快速正确运行和。
相关文章:
- 无法在通过jQuery的ajax加载的页面中执行javascript
- JavaScript执行暂时挂起页面
- 如何在ReactJS JSX中执行嵌套的if-else语句
- 当js函数's已执行
- 哪个先执行
- 在使用Polymer'加载所有json文件后执行方法;s的核心ajax
- HTML表单提交时未执行外部函数
- 对iPad上的点击事件反应缓慢
- 在Safari执行javascript之前对其进行修改
- Amd,希望确保某个东西总是最后执行
- 在Windows 10中自动执行例行程序(主要与浏览器交互)
- 递归使用 eval() 是检查程序执行的好方法吗?
- 如何做到这一点,使代码在不传递条件后执行函数
- 如何在执行此特定onclick事件时执行JavaScript函数
- 如何在从浏览缓存加载页面时执行javascript
- Ajax请求文档就绪会导致jquery加载缓慢
- Jquery表单验证插件-如果选中复选框,如何在提交时执行某些操作
- QT:Javascript执行缓慢(除非我登录到控制台)
- jQuery$.ajax执行缓慢
- 为什么这个正则表达式执行缓慢