如何在JavaScript中删除查询字符串参数?

除了使用正则表达式之外,还有没有更好的方法可以从标准Ja​​vaScript中的URL字符串中的查询字符串中删除参数?

到目前为止,这是我想出的方法,似乎可以在我的测试中使用,但是我不希望重新发明querystring解析!

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;

}

回答:

"[&;]?" + 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;

}

以上是 如何在JavaScript中删除查询字符串参数? 的全部内容, 来源链接: utcz.com/qa/398853.html

回到顶部