为Javascript优化Gruber URL正则表达式
Optimize Gruber URL regex for Javascript
我一直在使用John Gruber的伟大URL正则表达式来匹配非结构化文本消息中的URL。它在大多数情况下都非常有效,但我发现了一种情况,即性能会严重下降,这取决于括号内的内容。
// The URL matching regex.
var urls = /'b((?:[a-z]['w-]+:(?:'/{1,3}|[a-z0-9%])|www'd{0,3}[.]|[a-z0-9.'-]+[.][a-z]{2,4}'/)(?:[^'s()<>]+|'(([^'s()<>]+|('([^'s()<>]+')))*'))+(?:'(([^'s()<>]+|('([^'s()<>]+')))*')|[^'s`!()'[']{};:'".,<>?«»“”‘’]))/ig;
// An example URL that has horrible performance in some modern browsers
var url = "www.linkedin.com/people/~:(id,first-name,last-name,email-address,picture-url,phone-numbers,public-profile-url)";
url.replace(urls, "<a href='$1'>$1</a>");
原始帖子包含regex的多行注释版本,可以在此处找到:
http://daringfireball.net/2010/07/improved_regex_for_matching_urls
这里有一个JSFiddle,它围绕这个问题进行了一些性能计时:
http://jsfiddle.net/xMePg/4/
及其在Chrome上的输出:
Gruber URL Regex Performance
www.a.com/:(aaaaaaaaaaaaaa)1 MS
www.a.com/:(aaaaaaaaaaaaaaa)0 MS
www.a.com/:(aaaaaaaaaaaaaaaa)0 MS
www.a.com/:(aaaaaaaaaaaaaaaaa)2 MS
www.a.com/:(aaaaaaaaaaaaaaaaaa)3 MS
www.a.com/:(aaaaaaaaaaaaaaaaaaa)5 MS
www.a.com/:(aaaaaaaaaaaaaaaaaaaa)11 MS
www.a.com/:(aaaaaaaaaaaaaaaaaaaaa)22 MS
www.a.com/:(aaaaaaaaaaaaaaaaaaaaaa)44 MS
www.a.com/:(aaaaaaaaaaaaaaaaaaaaaaa)87 MS
www.a.com/:(aaaaaaaaaaaaaaaaaaaaaaaa)174 MS
www.a.com/:(aaaaaaaaaaaaaaaaaaaaaaaaa)348 MS
www.a.com/:(aaaaaaaaaaaaaaaaaaaaaaaaaa)704 MS
www.a.com/:(aaaaaaaaaaaa)(aaaaaaaaaaaaa)0 MS
有人能确定是什么原因导致了一些现代浏览器上比赛时间的增加吗?我想要么导致匹配失败,要么以某种方式优化正则表达式。
删除匹配括号的要求会使其更快。应该适用于绝大多数URL。。。
m/'b((?:[a-z]['w-]+:(?:'/{1,3}|[a-z0-9%])|www'd{0,3}[.]|[a-z0-9.'-]+[.][a-z]{2,4}'/)'S+(?:[^'s`!'[']{};:'".,?«»“”‘’]))/ig;
相关文章:
- 通过正则表达式从字符串中提取Url
- 用于确定URL视频ID的正则表达式
- url正则表达式不适用于javascript中的localhost
- JavaScript 中 URL 的正则表达式模式
- 什么'用这个正则表达式查找URL是错误的
- 修改以下正则表达式,使其在URL末尾包含斜杠
- javascript正则表达式url(url子字符串)
- JavaScript 中的主机名 url 正则表达式
- 为Javascript优化Gruber URL正则表达式
- 我的URL正则表达式允许空格但不应该't
- 不能让John Gruber' 2014更新的url正则表达式模式在Javascript中工作
- Javascript url正则表达式
- PHP+JAVASCRIPT url正则表达式与GET参数
- 替换URL正则表达式
- 检查url正则表达式的一部分
- NodeJS中的URL正则表达式问题
- Javascript URL正则表达式问题
- Url正则表达式不正确
- API 调用的 URL 正则表达式
- 新的tweet url正则表达式,用于正确的字符计数