gpt4 book ai didi

javascript - 为什么这个正则表达式会使 Chrome 挂起?

转载 作者:数据小太阳 更新时间:2023-10-29 04:30:08 28 4
gpt4 key购买 nike

尝试将其输入 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 \.-]*)*\/?$/);

返回 Null,因为它不匹配。现在......试试这个:

"http://www.kvraudio.com/forum/viewtopic.php?p=5238905".match(/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/);

没有! JS 似乎已死或以某种方式陷入循环。如果我在实际网页中使用上述内容,它会停止响应。甚至不会滚动!有人对此有任何解释吗?我做错了什么?!

最佳答案

因为你有catastrophic backtracking :

([\/\w \.-]*)*

应修改此表达式以删除其中一颗星 (*):

([\/\w \.-]*)

请注意,灾难性回溯通常只会在无法进行匹配时才会出现。这就是为什么您给出的第一个示例可以毫无问题地执行。

您的第二个示例在到达 ([...]*)* 之前退出,因此回溯没有机会生效。

有关灾难性回溯的更详尽解释,请参阅我对这个问题的回答:
How can I recognize an evil regex?

关于javascript - 为什么这个正则表达式会使 Chrome 挂起?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17116675/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com