AS3.0의 replace() 를 이용해서 문자열 바꾸기
by 세계의끝 on 5.27, 2009, under AS3.0 API
액션스크립트 3.0에 들어와서 AS2.0 이전에는 지원하지 않았던 String.replace() 메서드를 이용해 특정 문자열을 바꿀 수 있게 되었습니다.
0 1 2 3 4 5 6 | var baseText:String = "세계의끝과 하드보일드 원더랜드"; var str:String; str = baseText.replace("하드보일드","플래시"); trace( str ); //출력 : 세계의끝과 플래시 원더랜드 trace( baseText ); //출력 : 세계의끝과 하드보일드 원더랜드 |
위와 같이 baseText 에 replace() 메서드를 사용하면 원본 baseText 은 수정하지 않고 복사본의 문자열을 리턴합니다.
아래 메서드 정의를 보면 바꿔질 요소는 pattern 이고, 문자열을 반환합니다.
0 | function replace( pattern:*, repl:Object ):String |
pattern:* 에 문자열을 입력하면 toString() 으로 작동하고, 정규식[01] 을 사용하게 되면 아래 예제와 같이 정규식으로 작동합니다.
0 1 2 3 4 5 6 | var baseText:String = "그는 미술을 전공한 디자이너 출신입니다. 그는 현재 액션스크립트 개발자로 변신했죠."; var str:String; var myPattern:RegExp = /그는/g; str = baseText.replace(myPattern, "저는"); trace( str ); // 출력 : 저는 미술을 전공한 디자이너 출신입니다. 저는 현재 액션스크립트 개발자로 변신했죠. |
위의 예제는 while 이나 for 문을 사용하지 않고도 문자열의 모든 해당 단어를 모두 바꿔주는 강력한 기능을 보여주고 있습니다.
또한 정규식과 함께 두번째 파라미터인 repl 에 함수를 사용할 수도 있습니다.
0 1 2 3 4 5 6 7 8 9 10 11 | function replaceFuction():String { return arguments[2] + arguments[1]; } var baseText:String = "abc123 def456"; var str:String; var myPattern:RegExp = /([a-z]+)([0-9]+)/g; str = baseText.replace(myPattern, replaceFuction); trace( str ); //출력 : 123abc 456def |
이런식으로 정규식과 함수를 이용해 문자열의 순서를 바꾸거나 원하는 수준의 문자열 조작이 가능합니다.
이 포스트는 API 차원에서의 학습이라 할 수 있겠습니다. 액션스크립트에 이런 기능이 있으니 학습을 통해 자신의 것으로 만드는 행위인 것이죠.
이 글과 직접 연관된 다음 글은 학습한 API를 이용해 재사용이 가능한 형태로 만드는 작업이 이어집니다. 그것이 다시 확장되어 다른 클래스에서 활용되는 과정까지 살펴보세요.
- F1레퍼런스에는 일반표현식이라고 표현되어 있고, 보편적으로 정규표현식, 줄여서 정규식 이라고 많이 알려져 있습니다. [↑]
Blog under the Creative Commons Attribution-NoDerivs 3.0 License
8월 7th, 2009 on am 10:39
정보 감사합니다..
8월 7th, 2009 on am 10:49
네~
7월 29th, 2010 on am 2:39
replace 관련으로 검색하다가 왔습니다. 네이버 카페에서도 제 질문글에 자주 답글주시던 세계의끝님 블로그군요! 언제나 유용한 정보 고맙습니다. ㅇvㅇ
7월 29th, 2010 on am 2:43
네, 열심히 공부하세요 ^^