Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么这个正则表达式使Chrome挂起?_Javascript_Regex_Google Chrome - Fatal编程技术网

Javascript 为什么这个正则表达式使Chrome挂起?

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\.-

试着在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\.-]+)\.([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正确匹配;)