有没有比使用正则表达式更好的方法来删除标准JavaScript中URL字符串中的查询字符串中的参数?
到目前为止,我想出了一些在我的测试中似乎有效的方法,但我不喜欢重新发明查询字符串解析!
function RemoveParameterFromUrl( url, parameter ) {
if( typeof parameter == "undefined" || parameter == null || parameter == "" ) throw new Error( "parameter is required" );
url = url.replace( new RegExp( "\\b" + parameter + "=[^&;]+[&;]?", "gi" ), "" ); "$1" );
// remove any leftover crud
url = url.replace( /[&;]$/, "" );
return url;
}
发布于 2009-10-28 10:19:26
"[&;]?" + parameter + "=[^&;]+"
看起来很危险,因为它的参数‘bar’会匹配:
?a=b&foobar=c
此外,如果parameter
包含RegExp中的任何特殊字符,例如“.”,它也会失败。而且它不是全局正则表达式,所以它只会删除参数的一个实例。
为此,我不会使用简单的RegExp,我会解析中的参数并丢失您不想要的参数。
function removeURLParameter(url, parameter) {
//prefer to use l.search if you have a location/link object
var urlparts = url.split('?');
if (urlparts.length >= 2) {
var prefix = encodeURIComponent(parameter) + '=';
var pars = urlparts[1].split(/[&;]/g);
//reverse iteration as may be destructive
for (var i = pars.length; i-- > 0;) {
//idiom for string.startsWith
if (pars[i].lastIndexOf(prefix, 0) !== -1) {
pars.splice(i, 1);
}
}
return urlparts[0] + (pars.length > 0 ? '?' + pars.join('&') : '');
}
return url;
}
发布于 2017-06-16 16:01:57
Modern browsers提供了使用搜索参数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(`Your browser ${navigator.appVersion} does not support URLSearchParams`)
}
发布于 2018-07-04 16:56:01
您可以使用以下命令更改URL:
window.history.pushState({}, document.title, window.location.pathname);
这样,您可以覆盖没有搜索参数的URL,我在获取GET参数后使用它来清除URL。
https://stackoverflow.com/questions/1634748
复制相似问题