我使用以下正则表达式来检查网址是否有效
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 运行时,运行此操作不会在几分钟内完成。
正则表达式有问题吗?
最佳答案
挂起的原因是 backtracking正如马里亚诺在评论中提到的。具有多个量词(例如 * 和 +)的正则表达式可能会导致潜在匹配的可能排列太多,并且当字符串不匹配时,引擎在尝试探索所有这些排列时会永远挂起。
但是,除此之外,正则表达式还有多个问题并且不适合用途。我建议您重新开始使用有关此主题的先前问题中的方法之一:
关于javascript - URL 检查正则表达式在浏览器中无限运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32985399/