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
번호 제목 글쓴이 날짜 조회 수
» 정규표현식 029. 자바스크립트의 정규식 5 마라톤맨 2012-03-28 20723
28 정규표현식 028. 자바스크립트의 정규식 4 마라톤맨 2012-03-09 10804
27 정규표현식 027. 자바스크립트의 정규식 3 마라톤맨 2012-03-02 10891
26 정규표현식 026. 자바스크립트의 정규식 2 마라톤맨 2012-02-27 12699
25 정규표현식 025. 자바스크립트의 정규식 1 마라톤맨 2012-02-22 33370
24 정규표현식 024. 숙제와 답 마라톤맨 2012-02-17 11657
23 정규표현식 023. 정규식의 옵션과 여러 정규식 엔진들 마라톤맨 2012-02-15 73938
22 정규표현식 022. 드라이브명과 디렉토리, 파일명 분리 2 마라톤맨 2012-02-13 27095
21 정규표현식 021. 드라이브명과 디렉토리, 파일명 분리 1 마라톤맨 2012-02-08 15283
20 정규표현식 020. IP 주소 유효성 검사 2 마라톤맨 2012-02-06 12203
19 정규표현식 019. IP 주소 유효성 검사 1 마라톤맨 2012-02-02 103796
18 정규표현식 018. 하위 표현식 3 마라톤맨 2012-01-30 11697
17 정규표현식 017. 하위 표현식 2 마라톤맨 2012-01-27 9991
16 정규표현식 016. 하위 표현식 1 마라톤맨 2012-01-25 11706
15 정규표현식 015. 최대 매치와 최소 매치 2 마라톤맨 2012-01-20 10673
14 정규표현식 014. 최대 매치와 최소 매치 1 마라톤맨 2012-01-18 14222
13 정규표현식 013. 검색할 위치 2 마라톤맨 2012-01-16 10545
12 정규표현식 012. 검색할 위치 1 마라톤맨 2012-01-13 10899
11 정규표현식 011. 검색 문자 개수 지정하기 머니북 2012-01-12 23789
10 정규표현식 010. 웹 서버 설정에도 필요 머니북 2012-01-11 14946