정규식 테스터 (정규표현식 실시간 테스트)
패턴이 무엇을 잡는지 매치·캡처 그룹으로 확인합니다
괄호 ( ) 로 캡처 그룹을 만듭니다
자주 쓰는 패턴
입력한 글은 브라우저 밖으로 나가지 않습니다.
매치
정규식은 ‘글자’가 아니라 ‘패턴’을 찾는다
정규식(정규표현식)은 “이 정확한 단어”가 아니라 “이런 모양의 것”을 찾는 언어입니다. “숫자 네 개 뒤에 붙임표, 그 뒤에 숫자 두 개” 같은 규칙을 \d{4}-\d{2} 로 적으면, 2024-01 이든 1999-12 든 그 모양에 맞는 걸 전부 찾아냅니다. 문제는 이게 머릿속에서 안 그려진다는 것입니다. 패턴을 조금 바꾸면 잡히던 게 안 잡히고, 엉뚱한 게 걸립니다.
그래서 이 도구는 바꾸지 않고 보여 주기만합니다. 패턴을 입력하면 테스트 글에서 매치된 부분을 색으로 칠하고, 몇 개가 걸렸는지, 각 캡처 그룹이 무엇을 담았는지 표로 냅니다. 찾기·바꾸기가 “치환”이라면 이건 “디버깅”입니다 — 왜 안 맞는지, 왜 너무 많이 맞는지 눈으로 잡아냅니다.
다섯 개의 플래그가 규칙을 바꾼다
같은 패턴도 플래그에 따라 완전히 다르게 동작합니다.
- g (global) — 첫 매치에서 멈추지 않고 전부 찾습니다. 끄면 딱 하나만 봅니다.
- i (ignoreCase) — 대소문자를 무시합니다.
apple이 Apple, APPLE 도 잡습니다. - m (multiline) —
^와$가 문자열 전체가 아니라 각 줄의 시작·끝을 뜻하게 됩니다. 줄 단위로 뭔가 잡을 때 필수입니다. - s (dotAll) —
.이 보통은 줄바꿈을 안 넘는데, 이걸 켜면 줄바꿈까지 포함합니다. 여러 줄에 걸친 덩어리를 잡을 때 씁니다. - u (unicode) — 문자를 코드포인트 단위로 다루고
\p{L}(모든 글자) 같은 유니코드 속성을 쓸 수 있게 합니다. 이모지·다국어를 제대로 다루려면 켜세요.
캡처 그룹 — 매치 안에서 조각을 꺼낸다
괄호로 묶은 ( ) 부분이 캡처 그룹입니다. 매치 전체가 아니라 그 안의 일부만 따로 쓰고 싶을 때 씁니다. 날짜에서 연·월·일을 나눠 꺼내는 게 대표적입니다.
패턴: (\d{4})-(\d{2})-(\d{2})
입력: 2024-01-02
매치: 2024-01-02
그룹1: 2024 그룹2: 01 그룹3: 02번호가 헷갈리면 이름을 붙일 수 있습니다 — (?<year>\d{4}) 처럼요. 이 테스터는 매치마다 번호 그룹과 이름 그룹이 각각 무엇을 담았는지 보여 주니, 찾기·바꾸기에서 $1·$<year> 로 되참조하기 전에 여기서 확인하면 됩니다.
한글에서 조심할 것: \b 는 영문 경계다
가장 흔한 함정입니다. \b(단어 경계)는 ‘단어 문자’ (\w = 영문·숫자·밑줄)와 그 밖의 것 사이를 뜻합니다. 그런데 한글은 \w에 들어가지 않아, 한글과 한글 사이에는 경계가 생기지 않습니다. 그래서 \b사과\b 는 대부분 기대대로 동작하지 않습니다.
한글에서 낱말을 구분하려면 \b 대신 공백을 직접 쓰거나, (?<=\s|^)사과(?=\s|$) 같은 전후방 탐색을 쓰세요. 영문·숫자 식별자에는 \b가 잘 맞습니다 — 어디에 쓰는 도구인지만 구분하면 됩니다.
브라우저를 멈추는 정규식
정규식은 강력한 만큼 위험할 때가 있습니다. (a+)+$ 처럼 수량자를 중첩한 패턴에 긴 문자열을 물리면, 엔진이 시도해야 하는 경우의 수가 지수적으로 폭발합니다 (치명적 백트래킹, ReDoS). 이 도구는 서버가 아니라 여러분의 브라우저에서 도는데, 이런 패턴을 넣으면 결과가 안 나오고 탭이 굳습니다.
피하는 요령은 간단합니다 — 중첩된 수량자를 만들지 말고(+·* 안에 또 +·*), .* 대신 [^,]* 처럼 구체적인 문자 클래스를 쓰세요. 대부분의 실무 패턴은 이렇게만 해도 안전하고 빠릅니다.
정리하면
- 이건 치환이 아니라 이해 도구입니다. 매치와 그룹을 눈으로 확인해 패턴을 다듬습니다.
- 플래그가 규칙을 바꿉니다. 특히 여러 줄을 다룰 땐 m을, 이모지·다국어엔 u를 기억하세요.
- 한글엔 \b가 안 먹습니다. 공백이나 전후방 탐색으로 대신하세요.
자주 묻는 질문
- 찾기·바꾸기와 뭐가 다른가요?
- 찾기·바꾸기는 실제로 글자를 바꾸는 도구이고, 이 테스터는 패턴이 '무엇을 잡는지' 눈으로 확인하는 도구입니다. 매치된 부분을 하이라이트하고, 캡처 그룹이 각각 무엇을 담았는지 표로 보여 줍니다. 정규식을 만들다 왜 안 맞는지 디버깅할 때 씁니다.
- 플래그(g·i·m·s·u)가 각각 뭔가요?
- g(global)는 첫 매치가 아니라 모든 매치를 찾습니다. i(ignoreCase)는 대소문자를 무시합니다. m(multiline)은 ^와 $가 문자열 전체가 아니라 각 줄의 시작·끝에 맞게 합니다. s(dotAll)는 .이 줄바꿈까지 포함하게 합니다. u(unicode)는 코드포인트 단위로 처리하고 \p{...} 유니코드 속성을 쓸 수 있게 합니다.
- 캡처 그룹과 이름 있는 그룹은 무엇인가요?
- 괄호 ( )로 묶은 부분이 캡처 그룹입니다. 매치 전체 말고 그 안의 일부만 따로 꺼내 쓸 때 씁니다(예: 날짜에서 연·월·일을 각각). (?<year>\d{4})처럼 이름을 붙이면 번호 대신 이름으로 참조합니다. 이 테스터는 매치마다 각 그룹이 담은 값을 보여 줍니다.
- \b(단어 경계)가 한글에는 안 걸려요.
- 맞습니다. \b는 '단어 문자(\w = 영문·숫자·밑줄)'와 그 밖의 경계를 뜻하는데, 한글은 \w에 포함되지 않아 한글 사이에서는 경계가 잡히지 않습니다. 한글 단어를 구분하려면 \b 대신 공백이나 (^|\s), (?=\s|$) 같은 조건을 쓰세요.
- 브라우저가 멈추는 정규식이 있나요?
- 있습니다. (a+)+ 같은 패턴에 긴 문자열을 넣으면 경우의 수가 폭발해(치명적 백트래킹) 탭이 멎을 수 있습니다. 이 테스터는 브라우저 안에서 도는데, 이런 패턴은 결과가 안 나오고 화면이 굳는 신호입니다. 중첩된 수량자(+ * 안에 또 + *)를 피하고, 가능하면 구체적인 문자 클래스를 쓰세요.
- 입력한 글이 서버로 전송되나요?
- 아닙니다. 정규식과 테스트 텍스트 모두 브라우저 안에서만 처리되고, 어디로도 전송되거나 저장되지 않습니다.