자바스크립트의 정규식 관련 함수는 왜 6개나 되는 걸까요? 객체도 RegExp와 String의 두 가지로 나뉘어 있고 말이죠. 이는 사실 좀 짜증나는 일입니다. 정규식 갖고 할 수 있는 일은 어차피 두 개뿐입니다. 하나는 검색이고 다른 하나는 치환입니다. 따라서 함수도 두 개면 충분할 것입니다. 실제로 split 함수 경우는 문자열을 쪼개서 배열에 담는 용도로 많이 쓰이고 있습니다. 즉, 기본적으로는 정규식과 관련이 없습니다. 그런데도 정규식 관련 함수에 포함된 이유는 구분자에 정규식을 지정할 수 있기 때문입니다.

에구, 이거 시작도 하기 전에 불만부터 늘어놓게 됐네요. 뭐, 어쩌겠습니까. 까라면 까야죠. 사실 String 객체 자체에는 정규식을 처리하는 기능이 없다고 합니다. 그래서 내부적으로는 RegExp 객체를 호출하게 됩니다. 그렇다면 처음부터 RegExp 객체를 호출하는 게 더 효율적이라는 얘기가 되겠네요. 하지만 그 차이는 사실상 제로에 가까울 겁니다. 요즘 컴퓨터 성능이 워낙에나 막강하니까요. 제가 프로그래밍을 처음 시작할 때만 해도 한 줄의 코드를 줄이기 위해 인라인 어셈블리까지 동원하는 등 속도 문제에 참으로 민감했었는데 요새야 어디 그러나요. 생산성이 훨씬 더 중요시되는 시대지요.

자바스크립트의 정규식 객체와 관련해서 꼭 알아두셔야 할 게 있습니다. 두 가지의 객체가 사용방법에 있어서 정반대라는 점입니다. 역시 예부터 보시죠.

<script language="javascript">
s = '123abc4';

if (/\d{3}/.test(s))
document.write('성공<br>');
else
document.write('실패<br>');
</script>

지난 회에 보셨던 예제입니다. 여기서는 RegExp 객체를 사용하고 있습니다. 이 예제에서 객체만 String으로 바꿔 보겠습니다. RegExp 객체의 test와 비슷한 일을 하는 String 객체의 메써드는 match입니다. 따라서,

<script language="javascript">
s = '123abc4';

if (s.match(/\d{4}/))
document.write('성공<br>');
else
document.write('실패<br>');
</script>

위와 같이 if문만 변경하면 됩니다. 여기서 test와 match 함수를 보면 웃기게도 문자열과 패턴의 위치가 바뀌어 있습니다. 자바스크립트를 설계한 사람이 아마도 술 한잔 걸치고 나서 작업한 게 아닐런지요... 특별한 이유도 없이 이처럼 일관성 없게 함수마다 왔다갔다 하면 정말 열받습니다. 암튼 규칙이 그러하니 우리야 따를 수밖에 없습니다만. 6개의 함수 중 가장 간단한 것은 test입니다. 이 함수는 오직 true와 false만 리턴합니다. 앞의 예제에서 본대로입니다. 주어진 패턴과 매치가 되면 true를, 아니면 false를 리턴합니다.

워낙 간단하니 별다른 설명은 필요없습니다. 다만 옵션에 대한 건 여기서 살펴봐야 합니다. 자바스크립트의 정규식에는 옵션이란 게 있습니다. 옵션이란 대소문자를 구분할 것이냐, 말 것이냐 등을 지정하는 일종의 플래그입니다. 이에 대한 건 설명이 좀 길어질 듯하니 다음 회로 미루겠습니다.

List of Articles
번호 제목 글쓴이 날짜sort 조회 수
29 정규표현식 029. 자바스크립트의 정규식 5 마라톤맨 2012-03-28 15639
28 정규표현식 028. 자바스크립트의 정규식 4 마라톤맨 2012-03-09 9224
27 정규표현식 027. 자바스크립트의 정규식 3 마라톤맨 2012-03-02 9422
» 정규표현식 026. 자바스크립트의 정규식 2 마라톤맨 2012-02-27 11147
25 정규표현식 025. 자바스크립트의 정규식 1 마라톤맨 2012-02-22 31744
24 정규표현식 024. 숙제와 답 마라톤맨 2012-02-17 10163
23 정규표현식 023. 정규식의 옵션과 여러 정규식 엔진들 마라톤맨 2012-02-15 68796
22 정규표현식 022. 드라이브명과 디렉토리, 파일명 분리 2 마라톤맨 2012-02-13 23854
21 정규표현식 021. 드라이브명과 디렉토리, 파일명 분리 1 마라톤맨 2012-02-08 13645
20 정규표현식 020. IP 주소 유효성 검사 2 마라톤맨 2012-02-06 10842
19 정규표현식 019. IP 주소 유효성 검사 1 마라톤맨 2012-02-02 98633
18 정규표현식 018. 하위 표현식 3 마라톤맨 2012-01-30 10106
17 정규표현식 017. 하위 표현식 2 마라톤맨 2012-01-27 8433
16 정규표현식 016. 하위 표현식 1 마라톤맨 2012-01-25 10293
15 정규표현식 015. 최대 매치와 최소 매치 2 마라톤맨 2012-01-20 9194
14 정규표현식 014. 최대 매치와 최소 매치 1 마라톤맨 2012-01-18 12615
13 정규표현식 013. 검색할 위치 2 마라톤맨 2012-01-16 9074
12 정규표현식 012. 검색할 위치 1 마라톤맨 2012-01-13 9495
11 정규표현식 011. 검색 문자 개수 지정하기 머니북 2012-01-12 21474
10 정규표현식 010. 웹 서버 설정에도 필요 머니북 2012-01-11 13404