首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在JavaScript中删除查询字符串参数?

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

Stack Overflow用户
提问于 2009-10-28 09:52:29
回答 21查看 251.3K关注 0票数 146

有没有比使用正则表达式更好的方法来删除标准JavaScript中URL字符串中的查询字符串中的参数?

到目前为止,我想出了一些在我的测试中似乎有效的方法,但我不喜欢重新发明查询字符串解析!

代码语言:javascript
复制
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;
}
EN

回答 21

Stack Overflow用户

回答已采纳

发布于 2009-10-28 10:19:26

代码语言:javascript
复制
"[&;]?" + parameter + "=[^&;]+"

看起来很危险,因为它的参数‘bar’会匹配:

代码语言:javascript
复制
?a=b&foobar=c

此外,如果parameter包含RegExp中的任何特殊字符,例如“.”,它也会失败。而且它不是全局正则表达式,所以它只会删除参数的一个实例。

为此,我不会使用简单的RegExp,我会解析中的参数并丢失您不想要的参数。

代码语言:javascript
复制
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;
}
票数 187
EN

Stack Overflow用户

发布于 2017-06-16 16:01:57

Modern browsers提供了使用搜索参数URLSearchParams接口。它具有按名称删除参数的delete方法。

代码语言:javascript
复制
if (typeof URLSearchParams !== 'undefined') {
  const params = new URLSearchParams('param1=1&param2=2&param3=3')
  
  console.log(params.toString())
  
  params.delete('param2')
  
  console.log(params.toString())

} else {
  console.log(`Your browser ${navigator.appVersion} does not support URLSearchParams`)
}

票数 51
EN

Stack Overflow用户

发布于 2018-07-04 16:56:01

您可以使用以下命令更改URL:

代码语言:javascript
复制
window.history.pushState({}, document.title, window.location.pathname);

这样,您可以覆盖没有搜索参数的URL,我在获取GET参数后使用它来清除URL。

票数 29
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1634748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档