Javascript 为什么这个正则表达式使Chrome挂起?
试着在Chrome的JS控制台中输入这个。这是我找到的一个正则表达式,用于检查某个URL是否有效:Javascript 为什么这个正则表达式使Chrome挂起?,javascript,regex,google-chrome,Javascript,Regex,Google Chrome,试着在Chrome的JS控制台中输入这个。这是我找到的一个正则表达式,用于检查某个URL是否有效: "http://www.kvraudio.com/".match(/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/); 一个匹配被返回,它应该是这样的。现在试试这个: "tp:/www.kvraudio.com/forum/viewtopic.php".match(/^(https?:\/\/)?([\da-z\.-
"http://www.kvraudio.com/".match(/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/);
一个匹配被返回,它应该是这样的。现在试试这个:
"tp:/www.kvraudio.com/forum/viewtopic.php".match(/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/);
"http://www.kvraudio.com/forum/viewtopic.php?p=5238905".match(/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/);
返回Null,因为它不匹配。现在。。。。。试试这个:
"tp:/www.kvraudio.com/forum/viewtopic.php".match(/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/);
"http://www.kvraudio.com/forum/viewtopic.php?p=5238905".match(/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/);
没什么!JS似乎死了,或者不知何故卡在了一个循环中。如果我在实际的网页中使用上述内容,它将停止响应。甚至不会滚动!有人对此有什么解释吗?我做错了什么 因为你有:
应修改此表达式以删除其中一个星号(*
):
请注意,灾难性回溯通常只在无法进行匹配时才会出现。这就是为什么您给出的第一个示例执行时没有任何问题
第二个示例在到达([…]*)*
之前退出,因此回溯没有机会生效
有关灾难性回溯的更全面的解释,请参阅我对这个问题的回答:灾难性回溯,嗯?!以前从没听说过那个!非常感谢-解决了这个问题。现在我只需要使表达式与URL正确匹配;)