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

yog*_*gev 5 javascript regex

我试图从url查询字符串中删除一些参数.

我有一系列要删除的参数:

var queryParamsToRemove = ['destination','formName'];
Run Code Online (Sandbox Code Playgroud)

我试图做的是搜索网址中的每个参数,并使用a删除它RegExp.像这样的东西:

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

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

Col*_*dus 0

回答你真正的问题:

for (param in queryParamsToRemove){
    queryString = queryString.replace(new RegExp('[&\?]' + queryParamsToRemove[param] + '=.*(&?)', 'g'), '\1');
}
Run Code Online (Sandbox Code Playgroud)

那应该有效。

否则,您可以使用这样的函数: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]];
}
Run Code Online (Sandbox Code Playgroud)

将查询字符串转换为数组,然后您可以从那里删除值并将其转换回查询字符串。如果你使用 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);
Run Code Online (Sandbox Code Playgroud)