P粉1634659052023-08-21 11:15:52
現代瀏覽器提供了URLSearchParams
#介面來處理搜尋參數。此介面具有delete
方法,可以根據名稱刪除參數。
if (typeof URLSearchParams !== 'undefined') { const params = new URLSearchParams('param1=1¶m2=2¶m3=3') console.log(params.toString()) params.delete('param2') console.log(params.toString()) } else { console.log(`您的浏览器 ${navigator.appVersion} 不支持URLSearchParams`) }
P粉5069638422023-08-21 09:30:25
"[&;]?" + parameter + "=[^&;]+"
看起來很危險,因為參數 'bar' 會匹配:
?a=b&foobar=c
此外,如果 parameter
中包含任何在正規表示式中有特殊意義的字符,例如 '.',這個正規表示式就會失敗。而且它不是全域正規表示式,所以只會刪除一個參數的實例。
我不會使用簡單的正規表示式來做這個,我會解析參數並丟棄不需要的參數。
function removeURLParameter(url, parameter) { //如果你有一个location/link对象,最好使用l.search var urlparts = url.split('?'); if (urlparts.length >= 2) { var prefix = encodeURIComponent(parameter) + '='; var pars = urlparts[1].split(/[&;]/g); //反向迭代可能会破坏性 for (var i = pars.length; i-- > 0;) { //字符串.startsWith的习惯用法 if (pars[i].lastIndexOf(prefix, 0) !== -1) { pars.splice(i, 1); } } return urlparts[0] + (pars.length > 0 ? '?' + pars.join('&') : ''); } return url; }