다음을 통해 공유


교체 및 부분식

정규식에서 교체를 사용하면 둘 이상의 대체 항목 간 선택을 그룹화할 수 있습니다. 즉, 기본적으로 패턴에서 "this OR that"을 지정할 수 있습니다.

하위 식을 사용하면 검색된 텍스트에서 패턴을 찾아 일치 항목을 여러 개의 부분 일치로 분할할 수 있습니다. 이에 따른 부분 일치는 프로그램에 의해 검색될 수 있습니다. 또한 하위 식을 통해 JScript의 역참조에 설명된 대로 텍스트의 형식을 다시 지정할 수 있습니다.

정규식에 대한 자세한 내용은 정규식 만들기정규식 구문을 참조하십시오.

교체

파이프(|) 문자를 사용하여 둘 이상의 대체 항목 중에 선택하도록 지정할 수 있습니다. 이를 교체라고 합니다. 교체에서는 | 문자의 양쪽에서 가장 큰 식을 찾습니다. 다음 JScript 식은 1개 또는 2개의 숫자 앞에 있는 "Chapter" 또는 "Section"을 찾을 것으로 생각될 수도 있습니다.

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

그러나 이 정규식은 단어 "Chapter" 또는 단어 "Section"과 그 뒤에 있는 모든 숫자를 찾습니다. 검색되는 문자열이 "Section 22"이면 해당 식에서는 "Section 22"를 찾습니다. 그러나 검색되는 문자열이 "Chapter 22"이면 해당 식에서는 "Chapter 22"가 아니라 단어 "Chapter"를 찾습니다.

괄호를 사용한 교체

괄호를 사용해 교체 범위를 제한하여 두 단어 "Chapter"와 "Section"에만 적용되도록 할 수 있습니다. 괄호를 추가하면 정규식에서 "Chapter 1" 또는 "Section 3"을 찾도록 할 수 있습니다.

그러나 괄호는 하위 식을 만드는 데도 사용됩니다. 이에 따른 부분 일치는 프로그램에 의해 검색될 수 있습니다.

다음 JScript 정규식에서는 괄호를 사용하여 "Chapter"와 "Section"을 그룹화합니다. 이 정규식은 "Chapter"와 그 뒤의 숫자를 찾게 됩니다.

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

또한 Chapter|Section을 둘러싼 괄호는 일치하는 두 단어 중 하나가 향후 사용을 위해 저장되도록 합니다.

다음 예제는 일치 및 부분 일치를 코드에서 검색할 수 있는 방법을 보여 줍니다. 이 식에서는 괄호가 한 세트만 있으므로 하나의 부분 일치만 저장됩니다.

var re = /(Chapter|Section) [1-9][0-9]{0,1}/g
var src = "Chapter 50  Section 85"
ShowMatches(src, re);

// Output:
//  Chapter 50
//  submatch 1: Chapter

//  Section 85
//  submatch 1: Section

// Perform a search on a string by using a regular expression,
// and display the matches and submatches.
function ShowMatches(src, re)
{
    var result;

    // Get the first match.
    result = re.exec(src);
    
    while (result != null)
    {
        // Show the entire match.
        print();
        print(result[0]);

        // Show the submatches.
        for (var index=1; index<result.length; index++)
            {
                print("submatch " + index + ": " + result[index]);
            }

        // Get the next match.
        result = re.exec(src);
    }
}

저장되는 부분 일치 없는 교체

앞의 예제에서 단어 "Chapter"와 "Section" 사이의 선택을 그룹화하기 위해 괄호를 사용할 수도 있습니다.

나중에 사용하기 위해 부분 일치가 저장되지 않도록 하려면 (?:pattern) 하위 식을 지정하면 됩니다. 다음 예제에서는 이전 예제와 동일한 작업을 수행하지만 부분 일치를 저장하지는 않습니다.

var re = /(?:Chapter|Section) [1-9][0-9]{0,1}/g
var src = "Chapter 50  Section 85"
ShowMatches(src, re);
// Output:
//  Chapter 50
//  Section 85

하위 식

정규식에서 괄호를 사용하면 하위 식이 만들어집니다. 이에 따른 부분 일치는 프로그램에 의해 검색될 수 있습니다.

다음 예제의 정규식에는 하위 식 3개가 포함되어 있습니다. 부분 일치 문자열은 각 일치 문자열과 함께 표시됩니다.

var re = /(\w+)@(\w+)\.(\w+)/g
var src = "Please send mail to george@contoso.com and someone@example.com. Thanks!"
ShowMatches(src, re);
// The ShowMatches function is provided earlier.

// Output:
//  george@contoso.com
//  submatch 1: george
//  submatch 2: contoso
//  submatch 3: com

//  someone@example.com
//  submatch 1: someone
//  submatch 2: example
//  submatch 3: com

다음 예제는 URI(Universal Resource Indicator)를 여러 개의 구성 요소 부분으로 분리합니다.

처음에 나온 괄호의 하위 식은 웹 주소의 프로토콜 부분을 저장합니다. 이 하위 식에서는 콜론과 두 개의 슬래시 앞에 오는 단어를 찾습니다. 두 번째 괄호의 하위 식은 해당 주소의 도메인 주소를 저장합니다. 이 하위 식에서는 슬래시 표시(/) 또는 콜론(:)이 포함되지 않은 문자의 시퀀스를 찾습니다. 세 번째 괄호의 하위 식은 포트 번호가 지정되어 있으면 웹 사이트 포트 번호를 저장합니다. 이 하위 식에서는 콜론 뒤에 오는 0개 이상의 숫자를 찾습니다. 네 번째 괄호의 하위 식은 웹 주소에서 지정한 경로 및/또는 페이지 정보를 저장합니다. 이 하위 식에서는 번호 기호 문자(#) 또는 공백 문자가 아닌 0개 이상의 문자를 찾습니다.

var re = /(\w+):\/\/([^\/:]+)(:\d*)?([^# ]*)/gi;
var src = "https://msdn.microsoft.com:80/scripting/default.htm";
ShowMatches(src, re);

// Output:
//  https://msdn.microsoft.com:80/scripting/default.htm
//  submatch 1: http
//  submatch 2: msdn.microsoft.com
//  submatch 3: :80
//  submatch 4: /scripting/default.htm

양성 및 음성 Lookahead

양성 lookahead는 일치하는 텍스트가 발견된 후 이 텍스트 앞에서 다음 일치 텍스트를 찾기 시작하는 검색입니다. 일치 항목은 나중에 사용하기 위해 저장되지 않습니다. 양성 lookahead를 지정하려면 (?=pattern) 구문을 사용하십시오.

다음 예제에서는 암호 길이가 4글자에서 8글자이고 암호에 하나 이상의 숫자가 포함되어 있는지 여부를 확인하기 위해 검색이 수행됩니다.

이 정규식에서 .*\d는 임의 개수의 문자와 그 다음에 숫자가 오는 경우를 찾습니다. 검색되는 문자열이 "abc3qr"일 때 이는 "abc3"과 일치합니다. .{4,8}은 일치 항목의 뒤가 아니라 앞에서 시작해서 4-8개의 문자열을 찾습니다. 이는 "abc3qr"과 일치합니다.

^ 및 $는 검색되는 문자열의 시작 및 끝에서 위치를 지정합니다. 이는 검색된 문자열에 일치된 문자 밖의 문자가 포함되어 있으면 일치하지 않는 것으로 하기 위한 것입니다.

var re = /^(?=.*\d).{4,8}$/gi
var src = "abc3qr"
ShowMatches(src, re);
// The ShowMatches function is provided earlier.
// Output:
//  abc3qr

음성 lookahead는 음성 lookahead 식의 패턴과 일치하지 않는 검색 문자열을 검색합니다. 일치 항목을 찾은 후 일치한 텍스트의 앞에서 다음 일치 항목에 대한 검색을 시작합니다. 일치 항목은 나중에 사용하기 위해 저장되지 않습니다. 음성 lookahead를 지정하려면 (?!pattern) 구문을 사용하십시오.

다음 예제는 "th"로 시작하지 않는 단어를 찾습니다.

이 정규식에서 \b는 단어 경계를 찾습니다. 검색되는 문자열이 " quick "일 때 이는 첫 번째 공백과 일치합니다. (?!th)는 "th"가 아닌 문자열을 찾습니다. 이는 "qu"와 일치합니다. \w+는 일치 항목의 앞에서 단어를 검색합니다. 이는 "quick"과 일치합니다.

var re = /\b(?!th)\w+\b/gi
var src = "The quick brown fox jumps over the lazy dog."
ShowMatches(src, re);
// Output:
//  quick
//  brown
//  fox
//  jumps
//  over
//  lazy
//  dog

참고 항목

개념

JScript의 역참조

기타 리소스

정규식 소개