Javascript string.replace与正则表达式

时间:2011-02-22 07:23:31

标签: javascript jquery regex replace

我想用新的值替换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以最聪明的方式执行此操作,但我希望从更有经验的正则表达式的人那里得到一些帮助:)谢谢!

2 个答案:

答案 0 :(得分:2)

我宁愿使用location.search以及一些.splits()Array.prototype.somehelp

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]));