我正在使用以下正则表达式来检查网址是否有效
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")
使用最新的Google Chrome运行时,在几分钟内无法完成此操作。
正则表达式有问题吗?
答案 0 :(得分:1)
悬挂归于backtracking,正如马里亚诺在评论中提到的那样。具有多个量词(如*和+)的正则表达式可能会导致潜在匹配的可能排列太多,并且当字符串不匹配时,引擎会在尝试探索它们时永远挂起。
然而,除此之外,正则表达式存在多个问题,并且不适合用途。我建议你从之前关于这个主题的问题中选择一种方法: