除了使用正则表达式之外,是否有更好的方法可以从标准 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;
}
"[&;]?" + parameter + "=[^&;]+"
看起来很危险,因为它的参数“bar”会匹配:
?a=b&foobar=c
另外,如果parameter
包含 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;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)