RegExp 객체의 메써드 중 test가 매치의 여부만 리턴하는데 비해 exec 메써드는 매치가 될 경우 그 결과를 객체로 리턴합니다. 매치가 안 될 때는 false가 아닌 null을 리턴합니다. 여기서 결과가 객체로 리턴된다는 대목이 중요합니다. 우선 예부터 보겠습니다.

<script>
var s = '123abc4b';
var res = /b/g.exec(s);

document.write(res);
</script>

이 예제를 실행시켜 보면 웹브라우저에 ‘b’가 찍혀 나옵니다. 여기서 이상하다는 생각이 안 드세요? 두 번째 줄을 다음처럼

var res = s.match(/b/g);

바꿔보면 어떻게 될까요? 이때는 웹브라우저에 ‘b,b’로 찍혀 나옵니다. g 옵션이 붙어 있으니 이는 당연한 결과입니다. 그렇다면 exec 메써드는 g 옵션을 인식하지 못 하는 걸까요? 그렇습니다. 이게 또 문제지요. 암튼 자바스크립트도 은근히 이상하다니까요. 제가 감히 버그라고 주장하긴 좀 그렇습니다만... 뭐, 설계 버그 혹은 스펙 버그 같은 것일 수는 있죠.

그렇다 해도 exec 메써드는 나름 기특한 구석이 있습니다. 매치되는 문자열의 인덱스를 함께 알려준다는 것이죠.

<script>
s = '123abc4b';
var res = /b/g.exec(s);

document.write(res + '<br>');
document.write(res.index + '<br>');
document.write(res.input + '<br>');
</script>

위의 예제에서 설명드릴 것은 exec 메써드의 리턴값 중 프로퍼티 index와 input입니다. index는 매치된 문자의 인덱스입니다. 위의 예에서는 4가 됩니다. 0부터 세기 시작하니까요. input 프로퍼티는 주어진 텍스트 그 자체입니다. 위의 예에서는 ‘123abc4b’가 됩니다.

에효, 이제 test와 exec에 관한 설명은 대충 끝난 것 같네요. 다음 회에서 String 객체들의 메써드에 대해 마저 알아보죠.
List of Articles
번호 제목 글쓴이 날짜sort 조회 수
9 정규표현식 021. 드라이브명과 디렉토리, 파일명 분리 1 마라톤맨 2012-02-08 13743
8 정규표현식 022. 드라이브명과 디렉토리, 파일명 분리 2 마라톤맨 2012-02-13 24070
7 정규표현식 023. 정규식의 옵션과 여러 정규식 엔진들 마라톤맨 2012-02-15 69235
6 정규표현식 024. 숙제와 답 마라톤맨 2012-02-17 10243
5 정규표현식 025. 자바스크립트의 정규식 1 마라톤맨 2012-02-22 31837
4 정규표현식 026. 자바스크립트의 정규식 2 마라톤맨 2012-02-27 11234
3 정규표현식 027. 자바스크립트의 정규식 3 마라톤맨 2012-03-02 9498
2 정규표현식 028. 자바스크립트의 정규식 4 마라톤맨 2012-03-09 9318
» 정규표현식 029. 자바스크립트의 정규식 5 마라톤맨 2012-03-28 15781