如何从url查询中删除参数

how to remove parameters from url query?

本文关键字:删除 参数 查询 url      更新时间:2023-09-26

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

我有一组要删除的参数:

var queryParamsToRemove = ['destination','formName'];

我试图做的是搜索url中的每个参数,并使用RegExp将其删除。类似这样的东西:

for (param in queryParamsToRemove){
     patt = new RegExp(param,'g');
     queryString = queryString.replace('&' + patt + '=' + /*?=&/g,'');
}

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

这是我在项目中经常使用的一个函数,它允许您获取关联数组中的所有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;
}

您可以使用此函数获取所有参数,然后使用delete方法从数组中删除您不想要的参数。

var parameters = urlGet();
delete parameters.destination;
delete parameters.formName;

现在您只需要构建一个新的查询字符串。

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] + '=.*(&?)', 'g'), ''1');
}

这应该行得通。

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

类似这样的东西:

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]];
}

将查询字符串转换为数组,从中可以删除值并将其转换回查询字符串。如果你使用jQuery,你可以使用jQuery.param()

否则,制作自己的函数应该不会太难。

现在要将查询数组转换为字符串,我们可以执行以下操作:

reparam = function (queryArray) {
    var res = [];
    for(var i in queryArray) {
        res.push(i + "=" + queryArray[i]);   
    }
    return res.join('&');
}
var queryString = reparam(query);

好的,找到了一些有效的东西!

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