我想用新的值替换url querystring参数(如果已经存在),或者如果没有则将其添加。
e.g。
目前的网址可能是:
一个。 www.mysite.com/whatever.asp?page=5&version=1
或
湾www.mysite.com/whatever.asp?version=1
我需要生成的网址为www.mysite.com/whatever.asp?page=1&version=1
我怀疑我可以使用带有正则表达式的string.replace以最聪明的方式执行此操作,但我希望从更有经验的正则表达式的人那里得到一些帮助:)谢谢!
答案 0 :(得分:2)
我宁愿使用location.search
以及一些.splits()
和Array.prototype.some
help。
var s = location.search.slice(1).split(/&/);
check = s.some(function(elem) {
return elem.split(/=/)[0] === 'page';
});
if(!check) s.push('page=1');
location.href = location.hostname + location.pathname + '?' + s.join('&');
答案 1 :(得分:0)
我认为最清楚的解决方案是编写一个解析URL的正则表达式,然后从那里构建一个URL。这就是我要做的事情:
function urlCleanup(url) {
var match = /http:\/\/www\.mysite\.com\/whatever.asp\?(page=(\d+))?&?(version=(\d+))?/.exec(url);
var page = match[2] ? match[2] : "0";
var version = match[4] ? match[4] : "0";
return "http://www.mysite.com/whatever.asp?page=" + page + "&version=" + version;
}
var testUrls = [ "http://www.mysite.com/whatever.asp?page=4"
, "http://www.mysite.com/whatever.asp?version=5"
, "http://www.mysite.com/whatever.asp?page=4&version=5" ];
for(i in testUrls)
console.log(urlCleanup(testUrls[i]));
这个问题无法解决的问题是网址中的变量顺序相反(例如?version=5&page=2
)。为了解决这个问题,使用两个正则表达式搜索每个参数的URL可能更有意义,如下所示:
function urlCleanup(url) {
var match, page, version;
match = /version=(\d+)/.exec(url);
version = match ? match[1] : "0";
match = /page=(\d+)/.exec(url);
page = match ? match[1] : "0";
return "http://www.mysite.com/whatever.asp?page=" + page + "&version=" + version;
}
var testUrls = [ "http://www.mysite.com/whatever.asp?page=4"
, "http://www.mysite.com/whatever.asp?version=5"
, "http://www.mysite.com/whatever.asp?version=5&page=2"
, "http://www.mysite.com/whatever.asp?page=4&version=5" ];
for(i in testUrls)
console.log(urlCleanup(testUrls[i]));