2010-07-13 3 views
33

저는 Sitepoints 2007 책 "Simply Javascript"를 읽고 있는데 이해할 수없는 코드가 있습니다.

은 다음 코드입니다 :

Core.removeClass = function(target, theClass) 
{ 
    var pattern = new RegExp("(^|)" + theClass + "(|$)"); 
    target.className = target.className.replace(pattern, "$1"); 
    target.className = target.className.replace(/ $/, ""); 
}; 

첫 번째 호출 대체 방법으로 "$ 1"값에서 오는 또는 무엇을 의미하는 경우 나 퍼즐 무엇인지, 이해가 안된다. 나는 이라고 생각하면은 호출이 발견 된 패턴을 ""로 바꿔야한다고 생각합니다.

답변

51

괄호 ( ...의 각 쌍 )는 여분의 패턴에 사용될 수 $1, $2, $3 등으로 그 결과를 저장에 "포획 기"이다.

당신은 또한 (반복을 위해, 때로는 원래의 발현 또는 참), \1 같은 다른 정규식 엔진에서 \2, \3을, 같은 일을 볼 수 있습니다 그들은 일반적으로 다시 참조하기 때문에 이들은 "역 참조"라고

표현의 (이전) 부분으로.

은 (※ ? 캡처없이 (?: ... ) 단순히 그룹 인 비 캡처 그룹을 포함하여 특별한 행동의 다양한 형태를 나타냅니다.) 특정 예에서


는 $ 1이 될 것이다 그룹 (^|)은 "문자열의 시작 위치 (제로 너비) 또는 단일 공백 ​​문자"입니다.

그래서 전체 표현식을 바꾸면 기본적으로 변수 theClass과 그 뒤에 공백이있을 수 있습니다. (- 공백이나 문자열의 끝 위치 - 폐쇄 식 (|$)는 역이고 그것의 값이 사용되지 않기 때문에, 대신 (?: |$)와 비 캡처 수 있었다.)


는 희망이 확인 모든 것을 설명 -하자를 더 많은 정보가 필요하면 나도 알아.

+0

감사합니다. 지금은 분명합니다. "괄호의 각 쌍"이 의미하는 바를 이해하는 데 약간의 어려움이 있었지만 정규 표현식 패턴에 적용됩니다.정규식 패턴에 괄호 쌍이 있으면 캡처 그룹입니다. –

7

$ 1은 역 참조입니다. 정규 표현식에서 일치하는 첫 번째 일치 그룹 (괄호 세트)으로 바뀝니다. 첫 문자가 ? * 아니다

+0

이 경우 $ 1은 아무 것도 아닐 수 있습니다 (첫 번째 그룹이 0 행의^시작 문자와 일치하는 경우) 또는 공백 (첫 번째 그룹이 공백과 일치하는 경우). –

+1

아니요, ** 참고 **라고하지 않습니다. 그것은 "특별한 대체 패턴"이라고 불립니다. –