정규식 기초 가이드 — 다이어그램으로 이해하는 정규식

업데이트 2026-06-20 · 일반 학습용 정보 · 자바스크립트(ECMAScript) 정규식 문법 기준

작성 김지광 (운영자)감수 MDN·ECMAScript 명세 기반 정리마지막 업데이트 bal.pe.kr 마이크로 SaaS

1. 정규식이란

정규식(Regular Expression, 정규 표현식)은 문자열에서 특정 패턴을 찾거나 검사·치환하기 위한 작은 언어입니다. 예를 들어 "숫자 네 자리-숫자 두 자리-숫자 두 자리" 형태의 날짜를 찾고 싶을 때\d{4}-\d{2}-\d{2} 라고 적으면 됩니다. 문제는 패턴이 조금만 길어져도 기호가 빽빽해져 사람이 한눈에 읽기 어렵다는 점입니다. 이 도구는 정규식을 railroad(철도) 다이어그램으로 그려 구조를 시각적으로 보여주고, 각 기호의 의미를 한국어로 풀어 줍니다.

정규식 문법은 언어마다 미세하게 다르지만, 이 도구는 웹에서 가장 널리 쓰이는 자바스크립트(ECMAScript) 정규식을 기준으로 합니다. 대부분의 기본 문법은 Python, Java, Go 등에서도 거의 동일하게 통합니다.

2. railroad 다이어그램 읽는 법

railroad 다이어그램은 정규식이 매칭되는 흐름을 왼쪽에서 오른쪽으로 이어지는 철로처럼 표현합니다. 왼쪽의 원에서 출발해 오른쪽 원에 도착하면 매칭이 성립합니다.

  • 상자: 하나의 토큰(문자, 문자클래스, 단축표기 등). 상자 안의 글자가 매칭 대상입니다.
  • 가로선: 토큰을 순서대로 이어 줍니다. 왼쪽 상자를 통과한 뒤 오른쪽 상자로 진행합니다.
  • 갈라지는 선(분기): 대안(|)입니다. 여러 갈래 중 하나만 통과하면 됩니다.
  • 위로 넘어가는 선: 건너뛰기. 해당 토큰이 없어도 되는 경우(?, *)입니다.
  • 아래로 되돌아오는 고리: 반복. 같은 토큰을 여러 번 통과할 수 있습니다(+, *).
  • 점선 사각형: 그룹입니다. 라벨에 캡처 그룹 번호나 전/후방탐색 종류가 표시됩니다.

3. 문자와 문자클래스

가장 기본은 리터럴 문자입니다. cat 은 글자 c, a, t 가 순서대로 나오는 부분을 찾습니다. 여러 후보 중 하나를 찾을 때는 문자클래스 [...] 를 씁니다.

  • [abc] — a, b, c 중 한 글자
  • [a-z] — 소문자 a부터 z까지 중 한 글자(범위)
  • [0-9가-힣] — 숫자 또는 한글 한 글자
  • [^0-9] — 숫자가 아닌 한 글자(맨 앞 ^ 는 부정)

자주 쓰는 집합은 단축표기로 줄여 씁니다. \d 는 숫자([0-9]),\w 는 단어 문자(영문·숫자·밑줄), \s 는 공백입니다. 대문자\D, \W, \S 는 각각의 반대(부정)를 뜻합니다. 그리고 .(점)은 줄바꿈을 제외한 아무 문자 한 글자를 의미합니다.

4. 수량자 — 몇 번 반복할까

토큰 뒤에 붙는 수량자는 앞 토큰이 몇 번 반복되는지를 정합니다.

기호의미예시
*0개 이상(없어도 됨)a* → "", "a", "aaa"
+1개 이상\d+ → "5", "2026"
?0개 또는 1개(선택)https? → "http", "https"
{n}정확히 n개\d{4} → "2026"
{n,m}n개 이상 m개 이하\d{2,4} → "12"~"1234"

수량자 뒤에 ? 를 한 번 더 붙이면 게으른(lazy) 매칭이 됩니다. 기본은 최대한 길게 가져가는 탐욕적(greedy) 매칭이라, 예컨대 <.+> 는 한 줄 전체를 삼킬 수 있지만 <.+?> 는 가장 짧은 <...> 하나만 잡습니다.

5. 그룹과 캡처

소괄호 (...) 는 여러 토큰을 하나로 묶고, 매칭된 부분을 따로 저장하는 캡처 그룹을 만듭니다. 예를 들어 (\d{4})-(\d{2})-(\d{2}) 은 연·월·일을 각각 1번, 2번, 3번 그룹으로 추출합니다.

  • (...) — 캡처 그룹(번호 자동 부여)
  • (?:...) — 묶기만 하고 캡처는 안 함(비캡처 그룹)
  • (?<name>...) — 이름 있는 캡처 그룹
  • (?=...) / (?!...) — 긍정·부정 전방탐색(뒤에 무엇이 오는지 확인만)
  • (?<=...) / (?<!...) — 긍정·부정 후방탐색(앞에 무엇이 있는지 확인만)

전·후방탐색은 조건만 검사하고 실제 글자를 소비하지 않는 것이 특징입니다. 비밀번호 규칙처럼 "숫자를 포함해야 한다"는 조건을 (?=.*\d) 로 표현할 때 자주 씁니다.

6. 앵커와 대안

앵커는 글자가 아니라 위치를 가리킵니다. ^ 는 문자열(또는 줄)의 시작,$ 는 끝, \b 는 단어 경계를 뜻합니다. ^\d{5}$ 처럼 앞뒤를 앵커로 묶으면 "전체가 숫자 다섯 자리"인지 정확히 검사할 수 있습니다. 대안 | 은 "또는"입니다. cat|dog 는 cat 또는 dog 를 찾습니다.

7. 플래그(옵션)

정규식 끝에 붙는 플래그로 동작을 조절합니다. g 는 전역(모든 매칭),i 는 대소문자 무시, m 은 여러 줄(^$ 가 각 줄에 적용),s 는 점(.)이 줄바꿈까지 포함, u 는 유니코드 모드입니다. 이 도구의 플래그 버튼으로 켜고 끄며 결과 변화를 바로 확인할 수 있습니다.

8. 자주 쓰는 한국어 패턴 예제

  • 이메일: [\w.+-]+@[\w-]+\.[\w.-]+
  • 한국 휴대폰: 01[016789]-?\d{3,4}-?\d{4}
  • 우편번호(5자리): \b\d{5}\b
  • 날짜: (\d{4})-(\d{2})-(\d{2})
  • 한글 단어: [가-힣]+

홈 화면의 예제 버튼을 누르면 위 패턴과 샘플 문자열이 바로 채워집니다. 다이어그램과 설명을 비교하며 기호 하나하나가 그림의 어느 부분에 대응하는지 익혀 보세요.