그룹

Flash Player 9 이상, Adobe AIR 1.0 이상

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

/class-(\d*)/

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

  • 둘 이상의 문자에 한정 기호를 적용합니다.

  • | 문자를 사용하여 선택할 하위 패턴을 기술합니다.

  • 하위 문자열 일치 항목을 캡처합니다. 예를 들어, 일반 표현식에 \1 을 사용하여 이전의 일치 그룹을 찾거나, 이와 비슷하게 String 클래스의 replace() 메서드에서 $1 을 사용합니다.

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

한정 기호와 함께 그룹 사용

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

var pattern:RegExp = /ab*/ ; 
// matches the character a followed by 
// zero or more occurrences of the character b 
 
pattern = /a\d+/;  
// matches the character a followed by  
// one or more digits 
 
pattern = /a[123]{1,3}/; 
// matches the character a followed by  
// one to three occurrences of either 1, 2, or 3

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

var pattern:RegExp = /(ab)*/; 
// matches zero or more occurrences of the character a  
// followed by the character b, such as ababab 
 
pattern = /(a\d)+/; 
// matches one or more occurrences of the character a followed by  
// a digit, such as a1a5a8a3 
 
pattern = /(spam ){1,3}/;  
// matches 1 to 3 occurrences of the word spam followed by a space

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

| 문자와 함께 그룹 사용

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

var pattern:RegExp = /cat|dog/; 
// matches cat or dog 
 
pattern = /ca(t|d)og/; 
// matches catog or cadog

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

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

var pattern:RegExp = /(\d+)-by-\1/; 
// matches the following: 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.")); 
  // output: Bob, hello.

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

var pattern:RegExp = /(\w+)@(\w+).(\w+)/; 
var str:String = "bob@example.com"; 
trace(pattern.exec(str)); 
  // bob@example.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@example.com,bob,example,com 
 
//noncapturing: 
var pattern:RegExp = /(\w+)@(\w+).(?:com|org)/; 
var str:String = "bob@example.com"; 
trace(pattern.exec(str)); 
  // bob@example.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

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

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에 추가된 기능입니다.