유틸리티

정규식 기초 문법과 자주 쓰는 패턴, 실시간 테스트 방법

코드 리뷰에서 /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/ 같은 줄을 만나면 머리가 멍해진다. 정규표현식(Regular Expression, regex)은 문자열에서 특정 패턴을 찾고, 바꾸고, 검증하는 도구인데, 문법이 암호처럼 생겨서 익숙해지기까지 시간이 걸린다.

알아두면 되는 기초 문법

기호의미예시
.아무 문자 1개a.c → abc, a1c, a@c
*앞 문자 0개 이상ab*c → ac, abc, abbc
+앞 문자 1개 이상ab+c → abc, abbc (ac는 불일치)
?앞 문자 0개 또는 1개colou?r → color, colour
\d숫자 (0-9)\d{3} → 123, 456
\w영문/숫자/밑줄\w+ → hello, test_1
[abc]a, b, c 중 하나[aeiou] → 모음 매칭
^문자열 시작^Hello → Hello로 시작하는 줄
$문자열 끝\.com$ → .com으로 끝나는 문자열

실무에서 바로 쓰는 패턴 모음

이메일 주소 검증

/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/

@ 앞에 영문/숫자/일부 특수문자, 뒤에 도메인과 최소 2글자 TLD가 오는지 확인한다.

한국 휴대폰 번호

/^01[016789]-?\d{3,4}-?\d{4}$/

010, 011, 016, 017, 018, 019로 시작하고, 하이픈은 있어도 되고 없어도 매칭된다.

한글만 허용

/^[가-힣]+$/

완성형 한글만 통과한다. 자음이나 모음만 단독으로 들어오면 불일치.

플래그의 역할

  • g (global): 첫 번째 매칭에서 멈추지 않고 전체에서 찾는다
  • i (case-insensitive): 대소문자를 구분하지 않는다
  • m (multiline): ^와 $가 전체 문자열이 아닌 각 줄의 시작/끝에 적용된다
  • s (dotAll): .이 줄바꿈 문자까지 포함해서 매칭한다

패턴 작성하고 바로 확인하기

정규식은 머릿속으로만 짜면 거의 틀린다. 패턴을 쓰고 테스트 문자열을 넣어서 매칭 결과를 눈으로 확인하는 게 가장 확실하다. 정규식 테스터에 패턴과 텍스트를 입력하면 매칭되는 부분이 실시간으로 하이라이트 표시되고, 캡처 그룹 정보와 매칭 위치까지 상세하게 나온다. 이메일, URL, 전화번호 같은 자주 쓰는 패턴은 프리셋으로 제공되니까, 처음부터 짤 필요 없이 프리셋을 기반으로 수정하면 시간이 줄어든다.

정규식은 외우는 게 아니라 만들고 테스트하면서 익히는 거다. 복잡한 패턴일수록 한 단계씩 쌓아 올려야 실수가 줄어든다.