Javascript string.replace为regex
如果url querystring参数已经存在,我想用一个新值替换它;如果不存在,我想添加它 e、 g 当前url可以是:Javascript string.replace为regex,javascript,jquery,regex,replace,Javascript,Jquery,Regex,Replace,如果url querystring参数已经存在,我想用一个新值替换它;如果不存在,我想添加它 e、 g 当前url可以是: awww.mysite.com/whatever.asp?page=5&version=1 bwww.mysite.com/whatever.asp?version=1 我需要生成的url是www.mysite.com/whatever.asp?page=1&version=1 我想我可以用string.replace和regex来做这件事,这是最聪明的方法,但我希望有经验
a
www.mysite.com/whatever.asp?page=5&version=1
bwww.mysite.com/whatever.asp?version=1
我需要生成的url是www.mysite.com/whatever.asp?page=1&version=1
我想我可以用string.replace和regex来做这件事,这是最聪明的方法,但我希望有经验的人能给我一些帮助:)谢谢 我认为最清晰的解决方案是编写一个解析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]));
这无法处理的一个问题是url中的变量顺序相反(例如,?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]));
我宁愿使用location.search
以及一些.splits()
和
最大尊重:P现在让我玩一下:)我正在玩我在控制台中写的东西,它不太正确,我很快会在一个更干净的版本中编辑。实际上,这只是我需要玩的页面
部分。如果page
参数存在,则用新参数替换它,否则将其添加到endo,crap。我的回答太复杂了,不符合你的需要,对不起,我误读了这个问题。为此,您只需要我的第二个代码块的一个子集——如果您不清楚需要做什么,请告诉我。这通过使用您的正则表达式示例帮助我解决了问题,非常感谢。谢谢您的回答。我把它给了本森,因为我用他来解决我的问题和上regexs:P的课
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('&');