그룹

다음과 같이 괄호를 사용하여 일반 표현식에서 그룹을 지정할 수 있습니다.

/class-(\d*)/

그룹은 패턴의 하위 영역입니다. 그룹을 사용하면 다음과 같은 작업을 수행할 수 있습니다.

다음 단원에서는 이러한 그룹을 사용하는 방법에 대해 자세히 설명합니다.

세부 목차

한정 기호와 함께 그룹 사용
| 문자와 함께 그룹 사용
그룹을 사용하여 하위 문자열 일치 항목 캡처
비캡처 그룹 및 예측 그룹 사용
명명된 그룹 사용

한정 기호와 함께 그룹 사용

그룹을 사용하지 않으면 한정 기호는 다음과 같이 해당 한정 기호 앞에 나오는 문자 또는 문자 클래스에 적용됩니다.

var pattern:RegExp = /ab*/ ;
// 뒤에 b 문자가 0개 이상 나오는 a 문자를 찾습니다.

pattern = /a\d+/; 
// 뒤에 하나 이상의 숫자가 나오는 a 문자를 찾습니다.

pattern = /a[123]{1,3}/;
// 뒤에 1, 2 또는 3이 1-3개 나오는 a 문자를 찾습니다. 

그러나 그룹을 사용하면 둘 이상의 문자 또는 문자 클래스에 한정 기호를 적용할 수 있습니다.

var pattern:RegExp = /(ab)*/;
// ababab와 같이 뒤에 b 문자가 나오는 a 문자를 0개 이상 찾습니다. 

pattern = /(a\d)+/;
// a1a5a8a3와 같이 뒤에 숫자가 나오는 a 문자를 0개 이상 찾습니다. 

pattern = /(spam ){1,3}/; 
// 뒤에 공백이 나오는 단어 spam을 1-3개 찾습니다.

한정 기호에 대한 자세한 내용은 한정 기호를 참조하십시오.

| 문자와 함께 그룹 사용

그룹을 사용하면 다음과 같이 | 문자를 적용할 문자 그룹을 정의할 수 있습니다.

var pattern:RegExp = /cat|dog/;
// cat 또는 dog를 찾습니다.

pattern = /ca(t|d)og/;
// catog 또는 cadog를 찾습니다.

그룹을 사용하여 하위 문자열 일치 항목 캡처

패턴에서 표준 괄호 그룹을 정의하는 경우 나중에 일반 표현식에서 이 그룹을 참조할 수 있습니다. 이를 역참조라고 하고 이러한 그룹을 캡처 그룹이라고 합니다. 예를 들어, 다음 일반 표현식에서 \1 시퀀스는 캡처 괄호 그룹과 일치하는 모든 하위 문자열을 찾습니다.

var pattern:RegExp = /(\d+)-by-\1/;
// 다음을 찾습니다. 48-by-48

\1\2, ... , \99를 입력하여 일반 표현식에서 이러한 역참조를 최대 99개까지 지정할 수 있습니다.

마찬가지로 String 클래스의 replace() 메서드에서 $1-$99를 사용하여, 캡처한 그룹 하위 문자열 일치 항목을 대체 문자열에 삽입할 수 있습니다.

var pattern:RegExp = /Hi, (\w+)\./;
var str:String = "Hi, Bob.";
trace(str.replace(pattern, "$1, hello."));
// 출력: Bob, hello.

또한 캡처 그룹을 사용하는 경우 RegExp 클래스의 exec() 메서드 및 String 클래스의 match() 메서드는 캡처 그룹과 일치하는 하위 문자열을 반환합니다.

var pattern:RegExp = /(\w+)@(\w+).(\w+)/;
var str:String = "bob@example.com";
trace(pattern.exec(str));
  // bob@test.com,bob,example,com

비캡처 그룹 및 예측 그룹 사용

비캡처 그룹은 그룹화에만 사용되는 그룹으로, "수집"되지 않으며 번호가 지정된 역참조와 일치하지 않습니다. 비캡처 그룹을 정의하려면 다음과 같이 (?:)를 사용하십시오.

var pattern = /(?:com|org|net);

예를 들어, (com|org)를 각각 캡처 그룹에 추가하는 것과 비캡처 그룹에 추가하는 경우의 차이점에 주의하십시오. exec() 메서드는 완전히 일치하는 항목 다음에 캡처 그룹을 나열합니다.

var pattern:RegExp = /(\w+)@(\w+).(com|org)/;
var str:String = "bob@example.com";
trace(pattern.exec(str));
  // bob@test.com,bob,example,com
  
//noncapturing:
var pattern:RegExp = /(\w+)@(\w+).(?:com|org)/;
var str:String = "bob@example.com";
trace(pattern.exec(str));
  // bob@test.com,bob,example

비캡처 그룹에는 예측 그룹이라는 특수한 유형의 그룹이 있는데, 이 그룹은 긍정적 예측 그룹부정적 예측 그룹이라는 두 가지 유형으로 구분됩니다.

(?=)를 사용하여 긍정적 예측 그룹을 정의할 수 있습니다. 이 그룹은 그룹 내의 하위 패턴이 지정된 위치에서 일치해야 함을 지정합니다. 그러나 긍정적 예측 그룹과 일치하는 문자열 부분은 일반 표현식의 나머지 패턴과도 일치할 수 있습니다. 예를 들어, 다음 코드에서 (?=e)는 긍정적 예측 그룹이므로 이 그룹과 일치하는 e는 일반 표현식의 나머지 부분(이 코드에서는 캡처 그룹 \w*))과도 일치할 수 있습니다.

var pattern:RegExp = /sh(?=e)(\w*)/i;
var str:String = "Shelly sells seashells by the seashore";
trace(pattern.exec(str));
// Shelly,elly

(?! )를 사용하여 부정적 예측 그룹을 정의할 수 있습니다. 이 그룹은 그룹 내의 하위 패턴이 지정된 위치에서 일치하지 않아야 함을 지정합니다. 예를 들면 다음과 같습니다.

var pattern:RegExp = /sh(?!e)(\w*)/i;
var str:String = "She sells seashells by the seashore";
trace(pattern.exec(str));
// shore,ore

명명된 그룹 사용

명명된 그룹은 일반 표현식에서 특정 식별자가 지정된 그룹 유형입니다. 명명된 그룹을 정의하려면 (?P<name> )를 사용합니다. 예를 들어, 다음 일반 표현식에는 digits라는 식별자가 지정된 명명된 그룹이 포함되어 있습니다.

var pattern = /[a-z]+(?P<digits>\d+)[a-z]+/;

exec() 메서드를 사용하면 일치하는 명명된 그룹이 result 배열의 속성으로 추가됩니다.

var myPattern:RegExp = /([a-z]+)(?P<digits>\d+)[a-z]+/; 
var str:String = "a123bcd";
var result:Array = myPattern.exec(str);
trace(result.digits); // 123

다음 예제에서는 각각 namedom이라는 식별자가 지정된 두 개의 명명된 그룹을 사용합니다.

var emailPattern:RegExp = 
    /(?P<name>(\w|[_.\-])+)@(?P<dom>((\w|-)+))+\.\w{2,4}+/; 
var address:String = "bob@example.com";
var result:Array = emailPattern.exec(address);
trace(result.name); // bob
trace(result.dom); // example

중요

 

명명된 그룹은 ECMAScript 언어 사양에 포함되어 있지 않으며 ActionScript 3.0에 추가된 기능입니다.


Flash CS3

 

이 페이지에 의견 추가되면 전자 메일 알림 받기 | 의견 보고서

현재 페이지: http://livedocs.adobe.com/flash/9.0_kr/main/00000118.html