2012-11-03 50 views
0

我試着去使用JavaScript和正則表達式的URL來替換字符串。的Javascript更換()和正則表達式

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

我到底做錯了什麼?林新正則表達式。

回答

2

你告訴它來搭配/paged,但在你的字符串中沒有/paged。另外,[0-9]?可能不是您想要的數字。試試這個:

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

,告訴它與給定的字符串替換&pageid=...(其中...是一系列的一個或多個數字)。

+0

+1,我想補充什麼樣的字符需要被轉義的說明。 – gdoron

+0

這兩個答案都像魅力一樣,只是錯過了第二個參數中的'&'。謝謝! – Viktor

0

太多斜線。 \/將嘗試匹配一個斜線這是不是有:

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

不過,我覺得應該有更好的方法來分析和Javascript中重新組裝的URL。

1

你不需要逃避=,和你有一些額外的斜線來匹配那些在你的樣品網址不存在。如果沒有他們,它應該工作:

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

此致:

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

礦:

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

即你寫\/當你的意思是&。出於某種原因,您還在數字之前寫過它。你不需要轉義=

0

這裏是不使用正則表達式中的溶液。

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

DEMO

+0

除非'paged = ...'在最後,否則這不起作用。 – phant0m

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會爲您做所有事情。

1

使用回調函數:

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

this demo

+0

+1如果這就是你想要處理的頁碼 – phant0m