Flash CS3 설명서 |
|||
| ActionScript 3.0 프로그래밍 > 일반 표현식 사용 > 일반 표현식 구문 > 플래그 및 속성 | |||
다음 표에서는 일반 표현식에 설정할 수 있는 다섯 개의 플래그에 대해 설명합니다. 각 플래그는 일반 표현식 객체의 속성으로 액세스할 수 있습니다.
|
플래그 |
속성 |
설명 |
|---|---|---|
|
|
|
둘 이상의 일치 항목을 찾습니다. |
|
|
|
일치하는 항목을 찾을 때 대/소문자를 구분하지 않습니다. 또한 |
|
|
|
이 플래그가 설정되어 있는 경우 |
|
|
|
이 플래그가 설정되어 있는 경우 |
|
|
|
확장 일반 표현식을 사용할 수 있습니다. 패턴의 일부로 무시되는 공백을 일반 표현식에 입력할 수 있으며 이를 통해 일반 표현식 코드를 읽기 쉽게 입력할 수 있습니다. |
이러한 속성은 읽기 전용이며 다음과 같이 일반 표현식 변수를 설정할 때 플래그(g, i, m, s, x)를 설정할 수 있습니다.
var re:RegExp = /abc/gimsx;
하지만 명명된 속성을 직접 설정할 수는 없습니다. 예를 들어, 다음 코드를 실행하면 오류가 발생합니다.
var re:RegExp = /abc/; re.global = true; // 오류가 발생합니다.
기본적으로 일반 표현식 선언에 플래그를 지정하지 않으면 해당 플래그가 설정되지 않으며 해당 속성이 false로 설정됩니다.
또한 다음과 같이 일반 표현식의 다른 두 속성도 사용할 수 있습니다.
lastIndex 속성은 일반 표현식의 exec() 또는 test() 메서드를 다음에 호출할 때 사용하기 위해 문자열의 인덱스 위치를 지정합니다. source 속성은 일반 표현식의 패턴 부분을 정의하는 문자열을 지정합니다.g(global) 플래그가 포함되지 않은 일반 표현식은 일치 항목을 하나만 찾습니다. 예를 들어, g 플래그가 일반 표현식에 포함되어 있지 않은 경우 String.match() 메서드는 일치하는 하위 문자열을 하나만 반환합니다.
var str:String = "she sells seashells by the seashore."; var pattern:RegExp = /sh\w*/; trace(str.match(pattern)) // 출력: she
g 플래그가 설정되면 Sting.match() 메서드는 다음과 같이 일치 항목을 여러 개 반환합니다.
var str:String = "she sells seashells by the seashore."; var pattern:RegExp = /sh\w*/g; // 동일한 패턴이지만 이번에는 g 플래그 IS가 설정되었습니다. trace(str.match(pattern)); // 출력: she,shells,shore
기본적으로 일반 표현식으로 일치 항목을 찾을 때는 대/소문자를 구분합니다. 그러나 i(ignoreCase) 플래그를 설정하면 대/소문자 구분 특성이 무시됩니다. 예를 들어, 일반 표현식에 소문자 s를 포함하면 문자열의 첫 번째 문자인 대문자 S를 찾을 수 없습니다.
var str:String = "She sells seashells by the seashore."; trace(str.search(/sh/)); // 출력: 13 - 첫 문자 아님
그러나 i 플래그를 설정하면 일반 표현식에서 대문자 S를 찾습니다.
var str:String = "She sells seashells by the seashore."; trace(str.search(/sh/i)); // 출력: 0
i 플래그는 A-Z 및 a-z 문자에 대해서만 대/소문자 구분 특성을 무시하고 É와 é 같은 확장 문자에는 적용되지 않습니다.
m(multiline) 플래그가 설정되어 있지 않은 경우 ^은 문자열의 시작 부분을 찾고 $는 문자열의 끝 부분을 찾습니다. m 플래그가 설정되어 있는 경우 이러한 문자는 각각 행의 시작 부분과 끝 부분을 찾습니다. 개행 문자가 포함된 다음 문자열을 검토하십시오.
var str:String = "Test\n"; str += "Multiline"; trace(str.match(/^\w*/g)); // 문자열 시작 부분의 단어를 찾습니다.
일반 표현식에 g(global) 플래그가 설정되어 있더라도 문자열의 시작 지점인 ^에 대해서는 일치 항목이 하나뿐이므로 match() 메서드는 하위 문자열을 하나만 찾습니다. 따라서 출력 결과는 다음과 같습니다.
Test
다음은 같은 코드에 m 플래그를 설정한 경우입니다.
var str:String = "Test\n"; str += "Multiline"; trace(str.match(/^\w*/gm)); // 줄 시작 부분의 단어를 찾습니다.
그러면 두 행의 시작 부분에 있는 단어가 모두 출력에 포함됩니다.
Test,Multiline
행의 끝을 나타내는 문자는 \n뿐이며 다음 문자로는 행의 끝을 나타낼 수 없습니다.
\r) 문자\u2028) 문자\u2029) 문자s(dotall 또는 dot all) 플래그가 설정되어 있지 않은 경우 일반 표현식 패턴에 도트(.)를 포함해도 개행 문자(\n)를 찾을 수 없습니다. 다음 예제의 경우 일치하는 항목이 없습니다.
var str:String = "<p>Test\n"; str += "Multiline</p>"; var re:RegExp = /<p>.*?<\/p>/; trace(str.match(re));
하지만 s 플래그를 설정하면 개행 문자를 찾을 수 있습니다.
var str:String = "<p>Test\n"; str += "Multiline</p>"; var re:RegExp = /<p>.*?<\/p>/s; trace(str.match(re));
이 경우 개행 문자를 포함하여 <p> 태그 내에 있는 전체 하위 문자열이 검색됩니다.
<p>Test Multiline</p>
메타심볼이나 메타시퀀스가 많이 포함된 일반 표현식은 쉽게 읽을 수 없습니다. 예를 들면 다음과 같습니다.
/<p(>|(\s*[^>]*>)).*?<\/p>/gi
일반 표현식에 x(extended) 플래그를 사용하면 일반 표현식 패턴에 입력하는 공백이 무시됩니다. 예를 들어, 다음 일반 표현식은 위의 예제에 나오는 일반 표현식과 동일합니다.
/ <p (> | (\s* [^>]* >)) .*? <\/p> /gix
x 플래그를 설정한 경우 공백 문자를 찾지 않으려면 공백 앞에 백슬래시를 추가하십시오. 예를 들어, 다음 두 일반 표현식은 동일합니다.
/foo bar/ /foo \ bar/x
lastIndex 속성은 문자열에서 다음 검색을 시작할 인덱스 위치를 지정합니다. 이 속성은 g 플래그가 true로 설정된 일반 표현식에서 호출되는 exec() 및 test() 메서드에 영향을 줍니다. 예를 들어 다음 코드를 검토하십시오.
var pattern:RegExp = /p\w*/gi;
var str:String = "Pedro Piper picked a peck of pickled peppers.";
trace(pattern.lastIndex);
var result:Object = pattern.exec(str);
while (result != null)
{
trace(pattern.lastIndex);
result = pattern.exec(str);
}
lastIndex 속성은 기본적으로 0으로 설정되는데, 이렇게 하면 문자열의 맨 앞에서 검색을 시작합니다. 각 일치 항목을 찾은 후에는 이 속성이 해당 항목 다음의 인덱스 위치로 설정됩니다. 따라서 위의 코드를 실행하면 다음과 같이 출력됩니다.
0 5 11 18 25 36 44
global 플래그가 false로 설정되어 있는 경우 exec() 및 test() 메서드는 lastIndex 속성을 사용하거나 설정하지 않습니다.
String 클래스의 match(), replace() 및 search() 메서드는 해당 메서드를 호출할 때 사용된 일반 표현식의 lastIndex 속성 설정에 관계없이 문자열의 맨 앞에서 모든 검색을 시작합니다. 그러나 match() 메서드는 lastIndex 속성을 0으로 설정합니다.
lastIndex 속성을 설정하여 문자열에서 일반 표현식으로 일치 항목을 검색할 시작 위치를 조정할 수 있습니다.
source 속성은 일반 표현식의 패턴 부분을 정의하는 문자열을 지정합니다. 예를 들면 다음과 같습니다.
var pattern:RegExp = /foo/gi; trace(pattern.source); // foo
Flash CS3
이 페이지에 의견 추가되면 전자 메일 알림 받기 | 의견 보고서
현재 페이지: http://livedocs.adobe.com/flash/9.0_kr/main/00000119.html