2010-03-29 4 views

답변

22

(?:...)일치 (물론 나의 이해는 아주 잘 잘못 될 수 있음).

+0

그래서 내가 원하는 것을 얻으려면 = x.match (/ (ab) (?: cd) (ef) /); x = a [1] + a [2]; 옳은? – Murali

+3

@wizard : 당신은 그렇게 할 수 있습니다, 그렇습니다. 그러나 특정 포매팅 그룹은 그 특별한 표현을 위해 필요하지 않습니다. '/ (ab) cd (ef) /'는 같은 일을 할 것입니다. 'x.replace (/ (ab) cd (ef) /, "$ 1 $ 2")); 더 나은 방법이지만, 실제 표현은 여기에있는 예제보다 조금 더 복잡하다고 상상해보십시오. –

5

이해가 잘못되었습니다. 그룹은 여전히 ​​기본 캡처의 일부이지만 하위 표현 캡처로 간주되지 않습니다. (완전 일치)

x = "abcdefg" 
x = x.match(/ab(cd)ef/) 

배열 인덱스 0 "ABCDEF"가 될 것입니다 및 배열 인덱스 1 "CD", 하위 표현 캡처 것 : 두 경기의 배열을 반환 다음. ?:을 추가하면 정규 표현식에 하위 표현식 캡처에 신경 쓰지 않고 전체 일치를 완전히 캡처 할 수 있습니다.

다른 의견으로는 무엇을 할 수 있는지 여러 가지 방법이 있습니다. 예를 들어 :

x = "abcdefg" 
xarr = x.match(/(ab)(?:cd)(ef)/) 
x = xarr[1] + xarr[2] 

하지만 실제로는 정규식 ISN : 당신이 정말 정규식 만 외부 표현과 일치해야하는 경우

은 다른 답변에 추가
x.replace(/(ab)cd(ef)/, "$1$2"); 
x.slice(0, x.indexOf("cd")) + x.slice(x.indexOf("cd") + 2); 
0

, 당신은 같이해야 할 것이다 이 경우를 의미하지 않습니다.

+0

감사합니다. btw, 나는 당신이 & 대신에 +를 의미한다고 생각합니다. – Murali

+0

아, 그래, 나쁘다. VB.Net이 너무 많습니다. – tloflin

관련 문제