교체 및 그룹화

업데이트: 2007년 11월

교체 시에는 | 문자를 사용하여 두 개 이상의 대안 중에서 한 가지를 선택할 수 있습니다. 예를 들어, 장 제목 정규식을 확장하여 장 제목 이외의 내용을 반환할 수 있습니다. 하지만 이러한 작업은 생각만큼 간단하지 않습니다. 교체에서는 | 문자의 양쪽에서 가장 큰 식을 찾습니다.

예제

다음 식에서는 줄의 시작 부분과 끝 부분에서Chapter나 Section 다음에 한 자리 또는 두 자리 숫자가 나타나는 항목을 찾는 것으로 생각할 수 있습니다.

/^Chapter|Section [1-9][0-9]{0,1}$/

하지만 아쉽게도 위의 정규식에서는 줄의 시작 부분에서 Chapter만 찾거나 Section 단어와 줄의 끝 부분에서 Section 다음에 오는 숫자만 찾습니다. 입력 문자열이 Chapter 22이면 위의 식에서는 Chapter 단어만 찾습니다. 입력 문자열이 Section 22이면 해당 식에서는 Section 22를 찾습니다.

정규식의 응답성을 향상시키려면 교체 범위를 제한하기 위해, 즉 교체가 Chapter와 Section 단어 두 곳에만 적용됨을 확실히 하기 위해 괄호를 사용할 수 있습니다. 하지만 부분식을 만들고 역참조 단원에서 다루게 될 용도로 나중에 사용할 수 있도록 부분식을 캡처하기 위해 괄호를 사용할 수도 있습니다. 위의 정규식에서 적절한 위치에 괄호를 추가하여 Chapter 1이나 Section 3을 찾을 정규식을 만들 수 있습니다.

다음 정규식에서는 괄호를 사용하여 Chapter와 Section을 그룹화하였으므로 해당 식이 바르게 작동합니다.

/^(Chapter|Section) [1-9][0-9]{0,1}$/

이러한 식은 제대로 작동하지만 Chapter|Section 주위의 괄호는 두 개의 일치하는 단어 중 하나를 나중에 사용할 수 있도록 캡처합니다. 위의 식에서는 괄호가 한 세트만 있으므로 캡처된 부분 일치는 하나만 생깁니다. 이러한 부분 일치는 RegExp 개체의 $1-$9 속성을 사용하여 참조될 수 있습니다.

위의 예제에서 Chapter와 Section 단어 사이의 선택을 그룹화하기 위해 괄호를 사용할 수도 있습니다. 나중에 사용할 수 있도록 일치가 저장되는 것을 막으려면 괄호 내부의 정규식 패턴 앞에 ?:을 넣습니다. 다음과 같이 수정하면 부분 일치를 저장하지 않고 같은 기능을 제공하게 됩니다.

/^(?:Chapter|Section) [1-9][0-9]{0,1}$/

?: 메타문자 이외에 다른 두 개의 비캡처링 메타문자도 미리 보기 일치라는 것을 만듭니다. ?=을 사용하여 지정된 양의 미리 보기는 괄호 안의 일치하는 정규식 패턴이 시작하는 지점에서 검색 문자열을 찾습니다. ?!을 사용하여 지정된 음의 미리 보기에서는 정규식 패턴과 일치하지 않는 문자열이 시작하는 지점에서 검색 문자열을 찾습니다.

예를 들어, Windows 3.1과 Windows 95, Windows 98 및 Windows NT에 대한 참조가 포함된 문서가 있다고 가정합니다. 그리고 Windows 95, Windows 98 및 Windows NT에 대한 모든 참조를 Windows 2000으로 변경하여 문서를 업데이트해야 할 필요가 있다고 가정합니다. 양의 미리 보기의 예제인 다음 정규식에서는 Windows 95, Windows 98 및 Windows NT를 찾습니다.

/Windows(?=95 |98 |NT )/

일단 일치 항목을 찾으면 미리 보기의 문자를 포함하지 않고 찾은 텍스트 뒷부분부터 다음 일치 항목에 대한 검색이 바로 시작됩니다. 예를 들어, 위의 식에서 Windows 98을 찾았으면 98이 아닌 Windows 다음에서 검색이 다시 시작됩니다.

참고 항목

개념

JScript의 역참조

기타 리소스

정규식 소개