首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么regex要花很长时间来评估某一价值?

为什么regex要花很长时间来评估某一价值?
EN

Stack Overflow用户
提问于 2014-06-23 10:25:34
回答 2查看 612关注 0票数 2

下面是我的准则:

代码语言:javascript
复制
(https?:\/\/)([a-zA-Z]{2,6}\.)*((?!.*[|!{}[\]^"*;]).)+(\.*)([a-zA-Z0-9\.\-\/\:\?&=_%#]+)+([&|?])+$

它是验证一个具有负面前瞻性的URL,以便允许其他语言中的字符。

当我在http://regex101.com/#javascript上测试它时会发生这样的情况:

为了-

http://server.com/path?id=1111111 -不匹配 http://server.com/path?id=11111111 -超时您的表达式花了太长时间来评估。 http://server.com/path?id=111111111111111111111&匹配

观测:

当查询参数的值超过一定长度时,就会超时。

但是对于匹配的URL,参数值的长度并不重要。

为什么它超时超过一定的长度?需要修改的正则表达式的哪一部分?

注意: RegEx要求URL以?&结尾

提前谢谢。

编辑:

我需要的是一个正则表达式来验证所有标准(例如,www.xyz.com或someip:端口,后面跟着路径参数和/或查询参数等)URL。它也应该支持其他语言的字符。使用额外的验证来强制URL以?&结尾。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-23 12:45:30

(…+)+ in ([a-zA-Z0-9\.\-\/\:\?&=_%#]+)+导致灾难性回溯。去掉其中一个优点会有帮助。

票数 4
EN

Stack Overflow用户

发布于 2014-06-23 12:53:24

这是我能想到的最好的:

代码语言:javascript
复制
\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/

当然,这是不完整的,但它是相当接近你会想要和期待!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24363616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档