Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript string.replace为regex_Javascript_Jquery_Regex_Replace - Fatal编程技术网

Javascript string.replace为regex

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来做这件事,这是最聪明的方法,但我希望有经验

如果url querystring参数已经存在,我想用一个新值替换它;如果不存在,我想添加它

e、 g

当前url可以是:
a
www.mysite.com/whatever.asp?page=5&version=1
b
www.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('&');