2013-05-11 4 views
2

입력하여 문자열의 모든 숫자를 감소하는 것은 다음과 같이이다 :자바 스크립트 정규식 하나

path = "html body div div:eq(2) p:eq(4)" 

내가

path = "html body div div:eq(1) p:eq(3)" 
같은 문자열을 하나 괄호 안의 모든 숫자를 감소하고 싶어

어떻게해야합니까? 미리 감사드립니다.

답변

5

Prinzhorn의 대답은 더 간결하지만 나는 "엄격한"대안 제공 (도 괄호 안에 숫자 만 고려하는 대신 어디서나)하고 싶습니다.

path = path.replace(/\((\d+)\)/g, function(match, group1) { 
    return "(" + (parseInt(group1,10) - 1) + ")"; 
}); 

참고 :이 replace의 두 번째 인수로 기능을 제공 할 때, 당신은 전체 경기 및 인수로 각각 캡처 그룹 및 당신이 무엇을 반환 원래의 일치가 어디 삽입을받을 수 있습니다. 여기에서 글자 ()이 일치하며 [캡처 된] 숫자를 구문 분석하고이를 감소시킵니다.

+1

나는 parseInt를 생략 할 것이다. 숫자가 -1이므로 이중으로 확인한다. – mplungjan

+0

@mplungjan 확실하지만 엄격한 예제를 목표로하고 있으므로 문자열에서 숫자로 자동 변환하는 것을 피할 것이다. 같은 이유로'10'을 명시 적으로 만든다.) 그러나 YMMV ... – mgibsonbr

+0

답해 주셔서 감사합니다. 이것은 내가 원하는 것입니다 ~ –

3
str.replace(/\d+/g, function(a) {return a - 1;});