문자열의 패턴 및 하위 문자열 찾기

Flash Player 9 이상, Adobe AIR 1.0 이상

하위 문자열은 문자열 내의 연속 문자입니다. 예를 들어 문자열 "abc" 에는 "" , "a" , "ab" , "abc" , "b" , "bc" , "c" 와 같은 하위 문자열이 있습니다. ActionScript 메서드를 사용하여 문자열의 하위 문자열을 찾을 수 있습니다.

패턴은 ActionScript에서 문자열이나 일반 표현식으로 정의됩니다. 예를 들어 다음 일반 표현식은 글자 A, B, C 다음에 숫자가 오는 특정 패턴을 정의합니다(슬래시는 일반 표현식 구분 기호임).

/ABC\d/

ActionScript에는 문자열의 패턴을 찾고 찾은 항목을 대체 하위 문자열로 바꾸는 메서드가 포함되어 있습니다. 이러한 메서드에 대해서는 다음 단원에서 설명합니다.

일반 표현식은 복잡한 패턴을 정의할 수 있습니다. 자세한 내용은 일반 표현식 사용 을 참조하십시오.

문자 위치로 하위 문자열 찾기

substr() substring() 메서드는 서로 비슷합니다. 두 메서드 모두 문자열의 하위 문자열을 반환합니다. 또한 두 개의 매개 변수를 사용합니다. 두 메서드에서 첫 번째 매개 변수는 지정된 문자열에서 시작 문자의 위치입니다. 그러나 substr() 메서드에서 두 번째 매개 변수는 반환할 하위 문자열의 길이 인 반면 substring() 메서드에서 두 번째 매개 변수는 반환된 문자열에 포함되지 않는 하위 문자열의 에 있는 문자의 위치입니다. 다음 예제에서는 두 메서드 간의 차이점을 보여 줍니다.

var str:String = "Hello from Paris, Texas!!!"; 
trace(str.substr(11,15)); // output: Paris, Texas!!! 
trace(str.substring(11,15)); // output: Pari

slice() 메서드는 substring() 메서드와 작동 방식이 유사합니다. 두 개의 음수가 아닌 정수를 매개 변수로 지정하면 두 메서드는 똑같이 작동합니다. 하지만 slice() 메서드는 매개 변수로 음의 정수를 사용할 수 있으며, 이 경우 문자 위치는 다음 예제에서와 같이 문자열 끝에서 가지고 옵니다.

var str:String = "Hello from Paris, Texas!!!"; 
trace(str.slice(11,15)); // output: Pari 
trace(str.slice(-3,-1)); // output: !! 
trace(str.slice(-3,26)); // output: !!! 
trace(str.slice(-3,str.length)); // output: !!! 
trace(str.slice(-8,-3)); // output: Texas

음수가 아닌 정수와 음수를 slice() 메서드의 매개 변수로 결합할 수 있습니다.

일치하는 하위 문자열의 문자 위치 찾기

indexOf() lastIndexOf() 메서드를 사용하여 다음 예제와 같이 한 문자열 내에서 일치하는 하위 문자열을 찾을 수 있습니다.

var str:String = "The moon, the stars, the sea, the land"; 
trace(str.indexOf("the")); // output: 10

indexOf() 메서드는 대/소문자를 구분합니다.

두 번째 매개 변수를 지정하여 다음과 같이 검색을 시작할 문자열의 인덱스 위치를 나타낼 수 있습니다.

var str:String = "The moon, the stars, the sea, the land" 
trace(str.indexOf("the", 11)); // output: 21

lastIndexOf() 메서드는 문자열에서 마지막 하위 문자열을 찾습니다.

var str:String = "The moon, the stars, the sea, the land" 
trace(str.lastIndexOf("the")); // output: 30

lastIndexOf() 메서드로 두 번째 매개 변수를 포함하면 문자열의 해당 인덱스 위치부터 역방향(오른쪽에서 왼쪽)으로 검색이 실행됩니다.

var str:String = "The moon, the stars, the sea, the land" 
trace(str.lastIndexOf("the", 29)); // output: 21

구분 기호로 분리된 하위 문자열 배열 만들기

split() 메서드를 사용하여 하위 문자열의 배열을 만들 수 있습니다. 하위 문자열은 구분 기호를 기준으로 분리됩니다. 예를 들어 쉼표로 구분되거나 탭으로 구분된 문자열을 여러 문자열로 분리할 수 있습니다.

다음 예제에서는 구분 기호로 앰퍼샌드(&) 문자를 사용하여 배열을 하위 문자열로 분리하는 방법을 보여 줍니다.

var queryStr:String = "first=joe&last=cheng&title=manager&StartDate=3/6/65"; 
var params:Array = queryStr.split("&", 2); // params == ["first=joe","last=cheng"]

split() 메서드의 두 번째 매개 변수는 선택 사항이며 반환되는 배열의 최대 크기를 정의합니다.

구분 기호 문자로 일반 표현식을 사용할 수도 있습니다.

var str:String = "Give me\t5." 
var a:Array = str.split(/\s+/); // a == ["Give","me","5."]

자세한 내용은 일반 표현식 사용 Adobe Flash Platform용 ActionScript 3.0 참조 설명서 를 참조하십시오.

문자열의 패턴 찾기 및 하위 문자열 바꾸기

String 클래스에는 문자열의 패턴을 사용하여 작업하는 다음과 같은 메서드가 포함됩니다.

  • match() search() 메서드를 사용하여 패턴과 일치하는 하위 문자열을 찾습니다.

  • replace() 메서드를 사용하여 패턴과 일치하는 하위 문자열을 찾고 지정한 하위 문자열로 바꿉니다.

이러한 메서드에 대해서는 다음 단원에서 설명합니다.

문자열이나 일반 표현식을 사용하여 이러한 메서드에 사용할 패턴을 정의할 수 있습니다. 일반 표현식에 대한 자세한 내용은 일반 표현식 사용 을 참조하십시오.

일치하는 하위 문자열 찾기

search() 메서드는 이 예제와 같이 지정된 패턴과 일치하는 첫 번째 하위 문자열의 인덱스 위치를 반환합니다.

var str:String = "The more the merrier."; 
// (This search is case-sensitive.) 
trace(str.search("the")); // output: 9 

일반 표현식을 사용하여 이 예제와 같이 일치하는 패턴을 정의할 수도 있습니다.

var pattern:RegExp = /the/i; 
var str:String = "The more the merrier."; 
trace(str.search(pattern)); // 0

문자열의 첫 번째 문자는 인덱스 위치 0이므로 trace() 메서드의 출력은 0이며, i 플래그가 일반 표현식에 설정되어 있으므로 검색 시 대/소문자를 구분하지 않습니다.

search() 메서드는 g (global) 플래그가 일반 표현식에 설정되어 있어도 일치하는 한 항목만 찾으며 그 시작 인덱스 위치를 반환합니다.

다음 예제에서는 큰따옴표로 묶인 문자열과 일치하는 보다 복잡한 일반 표현식을 보여 줍니다.

var pattern:RegExp = /"[^"]*"/; 
var str:String = "The \"more\" the merrier."; 
trace(str.search(pattern)); // output: 4 
 
str = "The \"more the merrier."; 
trace(str.search(pattern)); // output: -1  
// (Indicates no match, since there is no closing double quotation mark.)

match() 메서드는 이와 유사하게 작동하며, 일치하는 하위 문자열을 검색합니다. 하지만 다음 예제와 같이 일반 표현식 패턴에서 전역 플래그를 사용할 경우 match() 메서드는 일치하는 하위 문자열의 배열을 반환합니다.

var str:String = "bob@example.com, omar@example.org"; 
var pattern:RegExp = /\w*@\w*\.[org|com]+/g; 
var results:Array = str.match(pattern);

results 배열은 다음과 같이 설정됩니다.

["bob@example.com","omar@example.org"]

일반 표현식에 대한 자세한 내용은 일반 표현식 사용 을 참조하십시오.

일치하는 하위 문자열 바꾸기

replace() 메서드를 사용하여 다음 예제와 같이 문자열에서 지정된 패턴을 검색하고 지정된 대체 문자열로 일치 항목을 바꿀 수 있습니다.

var str:String = "She sells seashells by the seashore."; 
var pattern:RegExp = /sh/gi; 
trace(str.replace(pattern, "sch")); //sche sells seaschells by the seaschore. 

이 예제에서는 i ( ignoreCase ) 플래그가 일반 표현식에 설정되어 있으므로 일치 문자열이 대/소문자를 구분하지 않으며, g ( global ) 플래그가 설정되어 있으므로 여러 일치 항목이 모두 바뀝니다. 자세한 내용은 일반 표현식 사용 을 참조하십시오.

대체 문자열에서 다음 $ 대체 코드를 사용할 수 있습니다. 다음 표에 표시된 대체 텍스트는 $ 대체 코드 위치로 삽입됩니다.

$ 코드

대체 텍스트

$$

$

$&

일치하는 하위 문자열

$`

일치하는 하위 문자열 앞에 오는 문자열의 일부. 이 코드에는 곧은 작은따옴표( ' )나 왼쪽으로 굽은 작은따옴표( ' )가 아닌 왼쪽으로 기울고 곧은 작은따옴표 문자( ` )가 사용됩니다.

$'

일치하는 하위 문자열 다음에 오는 문자열의 일부. 이 코드에는 곧은 작은따옴표( ' )가 사용됩니다.

$ n

괄호로 둘러싼 일치 그룹 중 n 번째로 캡처된 항목. 여기에서 n은 1에서 9 사이의 한 자리 숫자이고 $n 다음에는 10진수 숫자가 오지 않습니다.

$ nn

괄호로 둘러싼 일치 그룹 중 nn 번째로 캡처한 그룹. 여기에서 nn 은 01에서 99 사이의 두 자리 10진수입니다. nn 번째 캡처 항목이 정의되어 있지 않으면 빈 문자열이 대체 텍스트가 됩니다.

예를 들어 다음 예제에서는 일치 그룹 중 첫 번째 및 두 번째 캡처 항목을 나타내는 $2 $1 대체 코드를 사용하는 방법을 보여 줍니다.

var str:String = "flip-flop"; 
var pattern:RegExp = /(\w+)-(\w+)/g; 
trace(str.replace(pattern, "$2-$1")); // flop-flip

함수를 replace() 메서드의 두 번째 매개 변수로 사용할 수도 있습니다. 이 경우 일치하는 텍스트는 반환된 함수 값으로 바뀝니다.

var str:String = "Now only $9.95!"; 
var price:RegExp = /\$([\d,]+.\d+)+/i; 
trace(str.replace(price, usdToEuro)); 
 
function usdToEuro(matchedSubstring:String,                                  capturedMatch1:String,                                  index:int,                                  str:String):String 
{ 
    var usd:String = capturedMatch1; 
    usd = usd.replace(",", ""); 
    var exchangeRate:Number = 0.853690; 
    var euro:Number = parseFloat(usd) * exchangeRate; 
    const euroSymbol:String = String.fromCharCode(8364); 
    return euro.toFixed(2) + " " + euroSymbol; 
}

함수를 replace() 메서드의 두 번째 매개 변수로 사용할 때 다음 인수가 함수로 전달됩니다.

  • 문자열의 일치 부분

  • 괄호로 둘러싼 일치 그룹 중 캡처할 항목. 이렇게 전달되는 인수의 수는 괄호로 둘러싼 일치 항목의 수에 따라 달라집니다. 괄호로 둘러싼 일치 항목의 수를 확인하려면 함수 코드 내에서 arguments.length - 3 을 확인합니다.

  • 문자열에서 검색을 시작할 인덱스 위치

  • 전체 문자열