유틸리티

정규표현식 기초, 실무에서 바로 쓰는 패턴 5가지

회원가입 폼에 이메일 유효성 검사를 넣어야 한다. 구글링해서 정규식을 복붙했는데, /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/라는 패턴이 대체 무슨 뜻인지 모르겠다. 정규식은 한 번 이해하면 코드량을 절반으로 줄여주지만, 처음 보면 암호문 같다.

자주 쓰는 패턴 5가지

1. 이메일 형식 검증

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

@ 앞에 영문, 숫자, 일부 특수문자가 1개 이상, 뒤에 도메인과 최소 2글자 TLD가 오는 구조다. 완벽한 검증은 아니지만 기본적인 형식 체크에 충분하다.

2. 한국 전화번호

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

010, 011, 016, 017, 018, 019로 시작하고, 하이픈은 있어도 되고 없어도 된다. -?가 "하이픈 0개 또는 1개"를 의미한다.

3. 한글만 추출

[가-힣]+

유니코드 범위에서 완성형 한글만 매칭한다. 영문, 숫자, 특수문자를 제외하고 한글 단어만 뽑아낼 때 쓴다.

4. URL 추출

https?://[\w\-._~:/?#\[\]@!$&'()*+,;=%]+

http 또는 https로 시작하는 문자열을 찾는다. 로그 파일이나 텍스트에서 링크를 자동으로 추출할 때 유용하다.

5. 숫자에 쉼표 넣기 (치환용)

(\d)(?=(\d{3})+$)

치환 문자열을 $1,로 설정하면 1000000이 1,000,000으로 바뀐다. 금액 표시에 자주 쓰인다.

플래그가 결과를 바꾼다

플래그의미예시
g전체 매칭 (첫 번째만이 아닌 모든 결과)텍스트에서 이메일 전부 찾기
i대소문자 무시"Hello"와 "hello"를 같은 패턴으로 매칭
m멀티라인 (^, $가 각 줄에 적용)여러 줄 텍스트에서 줄 시작/끝 기준 매칭
s.이 줄바꿈도 포함HTML 태그 사이 내용 추출

g 플래그를 안 붙이면 첫 번째 매칭에서 멈춘다. 텍스트 전체에서 패턴을 찾으려면 반드시 g를 넣어야 한다.

패턴 검증은 바로 테스트하는 게 빠르다

정규식은 머릿속으로 시뮬레이션하면 실수가 생긴다. 패턴을 짠 뒤에는 테스트 문자열을 넣어서 의도대로 매칭되는지 확인해야 한다. 정규식 테스터에 패턴과 텍스트를 넣으면 매칭된 부분이 하이라이트되고, 캡처 그룹별 값과 인덱스까지 표시된다. 이메일, 전화번호 같은 프리셋 패턴도 있어서 처음 배울 때 참고하기 좋다.

TIP 캡처 그룹 () 안의 내용은 $1, $2로 참조할 수 있다. 치환 작업에서 매칭된 일부만 재활용할 때 핵심이 되는 기능이다.

정규식은 외울 필요 없다. 필요한 패턴을 찾고, 테스트하고, 동작하면 쓰는 것이다. 한 번에 완벽하게 짜려 하지 말고, 단순한 패턴부터 하나씩 조합하면 복잡한 것도 만들 수 있다.