一个非常奇怪的正则匹配指定类型URL就爆卡问题

潮起潮落 2017-02-21 12:12:08
代码直接复制到浏览器console执行,然后看自己的CPU

var strRegex = "^((https|http|ftp|rtsp|mms)?://)?(([0-9a-z_!~*'().&=+$%-]+: )?[0-9a-z_!~*'().&=+$%-]+@)?(([0-9]{1,3}.){3}[0-9]{1,3}|([0-9a-z_!~*'()-]+.)*([0-9a-z][0-9a-z-]{0,61})?[0-9a-z].[a-z]{2,6})(:[0-9]{1,4})?((/?)|(/[0-9a-z_!~*'().;?:@&=+$,%#-]+)+/?)$";
var re = new RegExp(strRegex,"gmi");
re.test("https://m.baidu.com/test/test-100008.html?utm_source=h5&utm_medium=xxxxx&utm_term=0221");


经过试探,发现跟三个参数中都存在下划线有关,下划线越多越卡,且结尾的数字0221,改为英文就完全没问题了。
具体原因不明,请各位大神指点!~
...全文
185 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
functionsub 2017-02-21
  • 打赏
  • 举报
回复
var strRegex = "^((https|http|ftp|rtsp|mms)?://)?(([0-9a-z_!~*'().&=+$%-]+: )?[0-9a-z_!~*'().&=+$%-]+@)?(([0-9]{1,3}.){3}[0-9]{1,3}|([0-9a-z_!~*'()-]+.)*?([0-9a-z][0-9a-z-]{0,61})?[0-9a-z].[a-z]{2,6})(:[0-9]{1,4})?((/?)|(/[0-9a-z_!~*'().;?:@&=+$,%#-]+)+/?)$";
var re = new RegExp(strRegex,"gmi");
re.test("https://m.baidu.com/test/test-100008.html?utm_source=h5&utm_medium=xxxxx&utm_term=0221");
改成这样就好啦。就是在([0-9a-z_!~*'()-]+.)*这里后面加上?,减少回溯次数。
functionsub 2017-02-21
  • 打赏
  • 举报
回复
经过验证其实跟下划线没关系,跟你/后面的内容长度有关系。。。 具体为啥还在研究中。。。

87,904

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧