다음 표에서는 일반 표현식에 설정할 수 있는 다섯 개의 플래그에 대해 설명합니다. 각 플래그는 일반 표현식 객체의 속성으로 액세스할 수 있습니다.
플래그
|
속성
|
설명
|
g
|
global
|
둘 이상의 일치 항목을 찾습니다.
|
i
|
ignoreCase
|
일치하는 항목을 찾을 때 대/소문자를 구분하지 않습니다. 또한 A-Z 및 a-z 문자에는 적용되지만 É 및 é와 같은 확장 문자에는 적용되지 않습니다 .
|
m
|
multiline
|
이 플래그가 설정되어 있는 경우 $와 ^은 각각 행의 시작 부분과 끝 부분을 찾을 수 있습니다.
|
s
|
dotall
|
이 플래그가 설정되어 있는 경우 .(도트)는 개행 문자(\n)를 찾을 수 있습니다.
|
x
|
extended
|
확장 일반 표현식을 사용할 수 있습니다. 패턴의 일부로 무시되는 공백을 일반 표현식에 입력할 수 있으며 이를 통해 일반 표현식 코드를 읽기 쉽게 입력할 수 있습니다.
|
이러한 속성은 읽기 전용이며 다음과 같이 일반 표현식 변수를 설정할 때 플래그(g, i, m, s, x)를 설정할 수 있습니다.
var re:RegExp = /abc/gimsx;
하지만 명명된 속성을 직접 설정할 수는 없습니다. 예를 들어, 다음 코드를 실행하면 오류가 발생합니다.
var re:RegExp = /abc/;
re.global = true; // This generates an error.
기본적으로 일반 표현식 선언에 플래그를 지정하지 않으면 해당 플래그가 설정되지 않으며 해당 속성이 false로 설정됩니다.
또한 다음과 같이 일반 표현식의 다른 두 속성도 사용할 수 있습니다.
g(global) 플래그
g(global) 플래그가 포함되지 않은 일반 표현식은 일치 항목을 하나만 찾습니다. 예를 들어, g 플래그가 일반 표현식에 포함되어 있지 않은 경우 String.match() 메서드는 일치하는 하위 문자열을 하나만 반환합니다.
var str:String = "she sells seashells by the seashore.";
var pattern:RegExp = /sh\w*/;
trace(str.match(pattern)) // output: she
g 플래그가 설정되면 Sting.match() 메서드는 다음과 같이 일치 항목을 여러 개 반환합니다.
var str:String = "she sells seashells by the seashore.";
var pattern:RegExp = /sh\w*/g;
// The same pattern, but this time the g flag IS set.
trace(str.match(pattern)); // output: she,shells,shore
i(ignoreCase) 플래그
기본적으로 일반 표현식으로 일치 항목을 찾을 때는 대/소문자를 구분합니다. 그러나 i(ignoreCase) 플래그를 설정하면 대/소문자 구분 특성이 무시됩니다. 예를 들어, 일반 표현식에 소문자 s를 포함하면 문자열의 첫 번째 문자인 대문자 S를 찾을 수 없습니다.
var str:String = "She sells seashells by the seashore.";
trace(str.search(/sh/)); // output: 13 -- Not the first character
그러나 i 플래그를 설정하면 일반 표현식에서 대문자 S를 찾습니다.
var str:String = "She sells seashells by the seashore.";
trace(str.search(/sh/i)); // output: 0
i 플래그는 A-Z 및 a-z 문자에 대해서만 대/소문자 구분 특성을 무시하고 É와 é 같은 확장 문자에는 적용되지 않습니다 .
m(multiline) 플래그
m(multiline) 플래그가 설정되어 있지 않은 경우 ^은 문자열의 시작 부분을 찾고 $는 문자열의 끝 부분을 찾습니다. m 플래그가 설정되어 있는 경우 이러한 문자는 각각 행의 시작 부분과 끝 부분을 찾습니다. 개행 문자가 포함된 다음 문자열을 검토하십시오.
var str:String = "Test\n";
str += "Multiline";
trace(str.match(/^\w*/g)); // Match a word at the beginning of the string.
일반 표현식에 g(global) 플래그가 설정되어 있더라도 문자열의 시작 지점인 ^에 대해서는 일치 항목이 하나뿐이므로 match() 메서드는 하위 문자열을 하나만 찾습니다. 따라서 출력 결과는 다음과 같습니다.
Test
다음은 같은 코드에 m 플래그를 설정한 경우입니다.
var str:String = "Test\n";
str += "Multiline";
trace(str.match(/^\w*/gm)); // Match a word at the beginning of lines.
그러면 두 행의 시작 부분에 있는 단어가 모두 출력에 포함됩니다.
Test,Multiline
행의 끝을 나타내는 문자는 \n뿐이며 다음 문자로는 행의 끝을 나타낼 수 없습니다.
캐리지 리턴(\r) 문자
유니코드 행 분리 기호(\u2028) 문자
유니코드 단락 분리 기호(\u2029) 문자
s(dotall) 플래그
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>
x(extended) 플래그
메타심볼이나 메타시퀀스가 많이 포함된 일반 표현식은 쉽게 읽을 수 없습니다. 예를 들면 다음과 같습니다.
/<p(>|(\s*[^>]*>)).*?<\/p>/gi
일반 표현식에 x(extended) 플래그를 사용하면 일반 표현식 패턴에 입력하는 공백이 무시됩니다. 예를 들어, 다음 일반 표현식은 위의 예제에 나오는 일반 표현식과 동일합니다.
/ <p (> | (\s* [^>]* >)) .*? <\/p> /gix
x 플래그를 설정한 경우 공백 문자를 찾지 않으려면 공백 앞에 백슬래시를 추가하십시오. 예를 들어, 다음 두 일반 표현식은 동일합니다.
/foo bar/
/foo \ bar/x
lastIndex 속성
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 속성
source 속성은 일반 표현식의 패턴 부분을 정의하는 문자열을 지정합니다. 예를 들면 다음과 같습니다.
var pattern:RegExp = /foo/gi;
trace(pattern.source); // foo