Flash CS3 설명서 |
|||
| ActionScript 3.0 프로그래밍 > 일반 표현식 사용 > 일반 표현식 구문 > 그룹 | |||
다음과 같이 괄호를 사용하여 일반 표현식에서 그룹을 지정할 수 있습니다.
/class-(\d*)/
그룹은 패턴의 하위 영역입니다. 그룹을 사용하면 다음과 같은 작업을 수행할 수 있습니다.
| 문자를 사용하여 선택할 하위 패턴을 기술합니다.\1을 사용하여 이전의 일치 그룹을 찾거나, 이와 비슷하게 String 클래스의 replace() 메서드에서 $1을 사용합니다.다음 단원에서는 이러한 그룹을 사용하는 방법에 대해 자세히 설명합니다.
그룹을 사용하지 않으면 한정 기호는 다음과 같이 해당 한정 기호 앞에 나오는 문자 또는 문자 클래스에 적용됩니다.
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
다음 예제에서는 각각 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에 추가된 기능입니다. |
Flash CS3
이 페이지에 의견 추가되면 전자 메일 알림 받기 | 의견 보고서
현재 페이지: http://livedocs.adobe.com/flash/9.0_kr/main/00000118.html