Javascript replace()和regex

时间:2012-11-03 17:21:08

标签: javascript regex

我尝试使用javascript和regex替换url中的子字符串。

myurl.com/?page_id=2&paged=2 

将成为

myurl.com/?page_id=2&paged=3

这是我的代码似乎不起作用:

nextLink = 'myurl.com/?page_id=2&paged=2'
nextLink = nextLink.replace(/\/paged\=\/[0-9]?/, 'paged='+ pageNum);

我在这里做错了什么?我是regex的新手。

7 个答案:

答案 0 :(得分:2)

您告诉它匹配/paged,但您的字符串中没有/paged。此外,[0-9]?可能不是您想要的数字。试试这个:

nextLink.replace(/\&paged=[0-9]+/, 'paged=' + pageNum);

告诉它用给定的字符串替换&pageid=...(其中...是一系列一个或多个数字)。

答案 1 :(得分:1)

您不需要转义=,并且还有一些额外的斜杠可以匹配您的示例网址中不存在的斜杠。如果没有它们,它应该有效:

nextLink = nextLink.replace(/[?&]paged=[0-9]?/, 'paged='+ pageNum);

答案 2 :(得分:1)

此致:

nextLink = nextLink.replace(/\/paged\=\/[0-9]?/, 'paged='+ pageNum);

矿:

nextLink = nextLink.replace(/&paged=[0-9]?/, 'paged='+ pageNum);

即。当你的意思是\/时,你写了&。由于某种原因你也在数字之前写了它。而且您不需要逃避=

答案 3 :(得分:1)

为什么要使用正则表达式,何时可以使用excellent URI.js library

URI("myurl.com/?page_id=2&paged=2")
    .removeQuery("paged")  // remove so we don't have a duplicate
    .addQuery("paged", pageNum)
    .toString();

您无需担心转义,URI.js会为您做任何事情。

答案 4 :(得分:1)

使用回调函数:

var r = new RegExp("paged=(\\d+)");
s = s.replace(r, function($1, $2){ return "paged=" + (parseInt($2, 10) + 1); });

请参阅 this demo

答案 5 :(得分:0)

太多斜线。 \/将尝试匹配不存在的文字斜杠:

nextLink = nextLink.replace(/paged=[0-9]?/, 'paged='+ pageNum);

但是,我认为应该有更好的方法来解析和重新组装Javascript中的URL。

答案 6 :(得分:0)

这是一个不使用正则表达式的解决方案。

var url ="myurl.com/?page_id=2&paged=2" , pageNum=3;
url = url.split("paged=")[0]+"paged="+pageNum;

DEMO