我尝试使用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的新手。
答案 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;