url检查正则表达式在浏览器中无休止地运行

URL-checking regular expression running endless in browser

本文关键字:无休止 运行 浏览器 检查 正则表达式 url      更新时间:2023-09-26

我使用以下正则表达式来检查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")

在使用最新的Google Chrome浏览器时,运行此操作不会在几分钟内完成。

正则表达式有问题吗?

挂起是由于回溯,正如Mariano在评论中提到的。一个正则表达式有多个量词,如*和+,可能会导致潜在匹配的可能排列太多,当字符串不匹配时,引擎在尝试探索它们时永远挂起。

然而,除此之外,正则表达式有多个问题,不适合目的。我建议你从之前关于这个话题的问题中选择一个方法重新开始:

尝试使用JavaScript验证URL

Javascript正则表达式验证URL