javascript - URL 检查正则表达式在浏览器中无限运行

标签 javascript regex

我使用以下正则表达式来检查网址是否有效

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正如马里亚诺在评论中提到的。具有多个量词(例如 * 和 +)的正则表达式可能会导致潜在匹配的可能排列太多,并且当字符串不匹配时,引擎在尝试探索所有这些排列时会永远挂起。

但是,除此之外,正则表达式还有多个问题并且不适合用途。我建议您重新开始使用有关此主题的先前问题中的方法之一:

Trying to Validate URL Using JavaScript

Javascript regular expression to validate URL

关于javascript - URL 检查正则表达式在浏览器中无限运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32985399/

相关文章:

c# - 替换字符或序列列表中未包含的所有字符

javascript - (?=) 没用,我只是改变了它的位置

javascript - 如何从 tinymce 4.x 中的窗口(弹出窗口)访问元素

javascript - 为什么 body.addEventListener ('scroll' ) 在 body.onscroll 工作时不起作用

javascript - 什么是 "x && foo()"?

regex - ack:通过正则表达式从搜索中排除特定目录

javascript - 如何从异步调用返回响应?

javascript - Jquery动态访问时值未定义

javascript - 正则表达式查找前面没有特定字符的字符

regex - 具有给定字母表的正则表达式语言的语法