var reg = /^(https?:\/\/)([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/
var url = "https://www.amazon.com/Kipling-BP3872-Ravier-Houndstooth-Multi/dp/B00RUBLS58/ref=s9u_simh_gw_i5?_encoding=UTF8&fpl=fresh&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=&pf_rd_r=8A9F9XHY539KKRA96135&pf_rd_t=36701&pf_rd_p=a6aaf593-1ba4-4f4e-bdcc-0febe090b8ed&pf_rd_i=desktop";
reg.test(url)
在谷歌浏览器下运行
有大神可以指导一下 ,为什么会卡掉吗?
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
@sanae 是正解,
很多
regex engine都是基于NFA回溯的,遇到**就会傻逼了,你把状态机的图画出来,手动做一次
DFS就知道了,一个
*是这样的:**则是这样的:中间多出了一个环,本来一个
*失配的时候就可以跳出去了,现在多了一个*,失配后又重新进入下个*了,一下子回溯的次数指数式上涨,就出现了题目卡死的情况中括号里面的东西不需要转义的。
([\/\w \.-]*)*后面的星号去掉就好了