1. ホーム
  2. javascript

[解決済み] JavaScriptでクエリ文字列のパラメータを削除するにはどうすればよいですか?

2022-04-26 07:08:14

質問

標準的な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 で特殊な文字、例えば '.' を含んでいます。また、グローバルな正規表現ではないので、パラメータの1つのインスタンスしか削除されません。

私なら単純な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;
}