Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从url查询中删除参数?_Javascript_Regex - Fatal编程技术网

Javascript 如何从url查询中删除参数?

Javascript 如何从url查询中删除参数?,javascript,regex,Javascript,Regex,我正在尝试从url查询字符串中删除一些参数 var query = '?'; for (var prop in parameters) { query += prop + '=' + parameters[prop] + '&'; }; query = query.substr(0, query.length - 1); 我有一组要删除的参数: var queryParamsToRemove = ['destination','formName']; 我试图做的是搜索u

我正在尝试从url查询字符串中删除一些参数

var query = '?';

for (var prop in parameters) 
{
    query += prop + '=' + parameters[prop] + '&';
};

query = query.substr(0, query.length - 1);
我有一组要删除的参数:

var queryParamsToRemove = ['destination','formName'];
我试图做的是搜索url中的每个参数,并使用
RegExp
删除它。大概是这样的:

for (param in queryParamsToRemove){
     patt = new RegExp(param,'g');
     queryString = queryString.replace('&' + patt + '=' + /*?=&/g,'');
}
unparam = function (value) {
    var
    // Object that holds names => values.
    params = [],
    // Get query string pieces (separated by &)
    pieces = value.split('&'),
    // Temporary variables used in loop.
    pair, i, l;

    // Loop through query string pieces and assign params.
    for (i = 0, l = pieces.length; i < l; i++) {
        pair = pieces[i].split('=', 2);
        // Repeated parameters with the same name are overwritten. Parameters
        // with no value get set to boolean true.
        params[decodeURIComponent(pair[0])] = (pair.length == 2 ?
            decodeURIComponent(pair[1].replace(/\+/g, ' ')) : true);
    }

    return params;
};

var query = unparam(querystr);
for(var i in queryParamsToRemove) {
    delete query[queryParamsToRemove[i]];
}

但这不起作用,因为语法问题,我想。

要回答您真正的问题:

for (param in queryParamsToRemove){
    queryString = queryString.replace(new RegExp('[&\?]' + queryParamsToRemove[param] + '=.*(&?)', 'g'), '\1');
}
这应该行得通

否则,您可以使用这样的函数:(只需从函数名中删除
jQuery
,就可以在没有任何库的情况下使用它)

大概是这样的:

for (param in queryParamsToRemove){
     patt = new RegExp(param,'g');
     queryString = queryString.replace('&' + patt + '=' + /*?=&/g,'');
}
unparam = function (value) {
    var
    // Object that holds names => values.
    params = [],
    // Get query string pieces (separated by &)
    pieces = value.split('&'),
    // Temporary variables used in loop.
    pair, i, l;

    // Loop through query string pieces and assign params.
    for (i = 0, l = pieces.length; i < l; i++) {
        pair = pieces[i].split('=', 2);
        // Repeated parameters with the same name are overwritten. Parameters
        // with no value get set to boolean true.
        params[decodeURIComponent(pair[0])] = (pair.length == 2 ?
            decodeURIComponent(pair[1].replace(/\+/g, ' ')) : true);
    }

    return params;
};

var query = unparam(querystr);
for(var i in queryParamsToRemove) {
    delete query[queryParamsToRemove[i]];
}

以下是我在项目中经常使用的函数,它允许您获取关联数组中的所有GET参数:

function urlGet()
{   
    var t = location.search.substring(1).split('&');
    var f = new Object();
    for (var i = 0; i < t.length; i++)
    {
        var x = t[i].split('=');
        f[x[0]] = x[1];
    }
    return f;
}
现在只需构建一个新的查询字符串

var query = '?';

for (var prop in parameters) 
{
    query += prop + '=' + parameters[prop] + '&';
};

query = query.substr(0, query.length - 1);

现在,将它添加到您的基本url,您就完成了

好的,找到了有效的方法

for (param in queryParamsToRemove) {
    queryString = queryString.replace(new RegExp('&(' + queryParamsToRemove[param] + '=)+((\w)*(.)*)*&', 'g'), '&');
}

非常感谢你。但是它在行中抛出了一个错误:parameters.splice('destination',1);说:“对象#没有方法‘拼接’参数正在解析好的,顺便说一下,我已经编辑了我的答案,您必须对对象使用
delete
method。Splice仅用于数字数组。@Sebj它也不能以这种方式正确连接。您应该在键和值之间加入
=
。非常感谢您的回答。有一件事-第一个短部分可以很好地移除关键点,但会将值保留在适当的位置。如果可以修改它,那么它也会删除这些值,并避免为这个相当简单的任务编写冗长的代码……:)如果你提到正则表达式,那么正如我说的,它不是最好的,只考虑字母的价值。。。您需要修改正则表达式以使其正确识别值(这可能是一项相当复杂的任务,除非您在网上找到一个现成的正则表达式)我的查询字符串是:formGeneratorNative.php?1=1&width=1920&height=979&device=table&isEmulator=false&deviceCategory=3&destination=lobbyWrapper.php&formName=Login,所以这些值实际上是单词。我不明白你为什么不被移除…它在这里起作用。(检查控制台),同时“formGeneratorNational.php?”部分不应该是查询字符串的一部分!虽然在这种情况下可能不相关,但是其他将其拆分为数组的方法将无法顺利使用它。再次感谢。但是如果你仔细看,它不起作用。输出为:formGeneratorNative.php?1=1&width=1920&height=979&device=tablet&isEmulator=false‌​&deviceCategory=3lobbyWrapper.phpLogin和ass您可以看到,“lobbyWrapper.phpLogin”仍然存在……当要删除的参数位于查询字符串的末尾(或开头)时,这将不起作用。与您的示例一样,formName不会被删除。我将更新我的答案,检查它。它确实有效…:)X*也可以是空字符串。请参见此处,它不起作用:formName不会被删除,因为它是最后一个。如果它是第一个,也一样(这就是为什么不应该在查询字符串中使用文件名)。“目的地”后面的所有内容也都被删除了。这很奇怪。。。我从查询字符串中去掉了文件名,它对我来说很好。我看不出它在拉小提琴。不明白为什么。我再看一眼,我明白为什么它不应该工作了。因为我在“登录”之后没有“&”。。。所以我想我也会在url的末尾加上&1=1。