URLの検索文字列のパラメータ値を簡単に置換するコード

1757 ワード

URLの中のquery部分の指定パラメータの値を新しいものに変更する必要があります.このパラメータが存在しないなら、新しいキーペアをqueryの最後に追加します.前提は:
1、入力した文字列は空かもしれません.空でなければ、各パラメータはkey=value形式であることを保証します.その中にkeyと等号は必ず存在します.
2、入力されたkeyは変な文字を持っていません.(JavaScriptの正規表現を避けて、escape機能を提供していません.)
考えてみたら正規表現で作っても足りないと思います.普通バージョンをあげました.
function setQueryParamValue(queryString, key, newValue) {
var newParam = key + '=' + newValue;
if (!queryString) return newParam;

var replaced = false;
var params = queryString.split('&');
for (var i = 0; i < params.length; i++) {
if (params[i].split('=')[0] == key) {
params[i] = newParam;
replaced = true;
}
}
if (replaced) return params.join('&');
return queryString + '&' + newParam;
}
正規表現と論理演算式を使ってもう一度実行しました.
function setQueryParamValue(queryString, key, newValue) {
var replaced = false;
var newParam = key + '=' + newValue;
var result = queryString.replace(new RegExp('(^|&)' + key + '=(.*?)(?=$|&)', 'g'), function (s, p1, p2) {
replaced = true;
return p1 + newParam;
});
return replaced && result || queryString && (queryString + '&' + newParam) || newParam;
}
(安全にするなら、ここでキーにescapeを一回やるべきですが、前提条件があれば大丈夫です.)
コードの文字数からいえば、やはり短すぎません.
同じ前提条件でパラメータの値を抽出するのは簡単です.
function getQueryParamValue(queryString, key) {
var result = queryString.match(new RegExp('(?:^|&)' + key + '=(.*?)(?=$|&)'));
return result && result[1];
}
これは正規表現でない方法でやります.
もっといい方法があったら正規表現でこの機能を実現してください.教えてください.