var url = 'https://mp.weixin.qq.com/s?__biz=MzAxNjczMTQxMA==&mid=504131096&idx=1&sn=c2fe41152807821b7916fa9539a0cf87&scene=1&srcid=0718JR98ETFngTl6mDsNRfhK&key=77421cf58af4a65374324bd2f16d7fdd913230b5ab4bd48a72759cc99919893795265ff20c0c8a79c676e636f789899c&ascene=0&uin=MjAzOTExMTUxMg%3D%3D&devicetype=iMac15%2C1+OSX+OSX+10.11.5+build(15F34)&version=11020201&pass_ticket=kA76WNrCKCEZ3JyEii3tYs88BCmLEM%2FI4LPD%2FtHBzoPjYzI9t7seUadtUUVQ9677';
var reg = /^(http(s)?:\/\/)?(([\w\.]+)\.(?:com|cn|love|net|com\.cn|org)(\/|#|!|%|\w|\d|&|\?|-|=|~|\.|\+)*)$/;
url.match(reg);
我想测试一个字符串是否有效URL,但匹配语句会导致进程崩溃! - 浏览器或iOS应用程序,以后不会回应,CPU一直是90%+,可能是无限循环? 我的reg有什么不对或者这是一个正则表达式的BUG?这是一个正则表达式BUG吗?
我测试了JavaScript(http://regexr.com/),节点和iOS,它们返回超时或无响应(崩溃)。
有一点是肯定的:问题是灾难性的回溯。 '(\/|#|!|%| \ w | \ d |&| \?| - | = |〜| \。| \ +)*'组正在杀死它,替换为一个字符类 - '[ !\ /#%\ W&\ - ?=〜+] *'。 –
http://www.regular-expressions.info/catastrophic.html – daveoncode