我使用下面的正则表达式来检查URL是否有效
var re = /^(http[s]?:\/\/(www\.)?|ftp:\/\/(www\.)?|www\.){1}([0-9A-Za-z-\.@:%_+~#=]+)+((\.[a-zA-Z]{2,3})+)(/(.)*)?(\?(.)*)?/;
var is_valid = re.test(input_url);它适用于小的输入,但随着较大的输入开始无休止地运行。考虑以下64个字符的输入
re.test("http://xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")当使用最新的谷歌Chrome运行时,运行这个程序不会在几分钟内完成。
正则表达式有问题吗?
发布于 2015-10-07 07:11:03
吊死是由于回溯,正如马里亚诺在评论中提到的。具有多个量词(如*和+)的正则表达式可能会导致潜在匹配的排列过多,当字符串不匹配时,引擎将永远挂起。
但是,除此之外,regex还存在多个问题,不适合使用。我建议您从前面有关这个主题的问题中的一种方法重新开始:
https://stackoverflow.com/questions/32985399
复制相似问题