2012-11-03 3 views
0

URL에서 하위 문자열을 바꾸기 위해 javascript와 regex를 사용하려고합니다.Javascript replace() and regex

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

는 그러나, 나는 구문 분석과 자바 스크립트의 URL을 조립 다시 더 나은 방법이 있어야한다고 생각합니다.

1

=을 탈출 할 필요가 없으며 일치하는 일부 추가 슬래시가 샘플 URL에 없습니다. 그들 없이는 작동합니다 :

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