본문 바로가기
TextKit

정규식 테스터 (정규표현식 실시간 테스트)

패턴이 무엇을 잡는지 매치·캡처 그룹으로 확인합니다

//g

괄호 ( ) 로 캡처 그룹을 만듭니다

자주 쓰는 패턴

입력한 글은 브라우저 밖으로 나가지 않습니다.

매치

패턴을 입력하면 매치가 여기에 표시됩니다.

정규식은 ‘글자’가 아니라 ‘패턴’을 찾는다

정규식(정규표현식)은 “이 정확한 단어”가 아니라 “이런 모양의 것”을 찾는 언어입니다. “숫자 네 개 뒤에 붙임표, 그 뒤에 숫자 두 개” 같은 규칙을 \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+)+ 같은 패턴에 긴 문자열을 넣으면 경우의 수가 폭발해(치명적 백트래킹) 탭이 멎을 수 있습니다. 이 테스터는 브라우저 안에서 도는데, 이런 패턴은 결과가 안 나오고 화면이 굳는 신호입니다. 중첩된 수량자(+ * 안에 또 + *)를 피하고, 가능하면 구체적인 문자 클래스를 쓰세요.
입력한 글이 서버로 전송되나요?
아닙니다. 정규식과 테스트 텍스트 모두 브라우저 안에서만 처리되고, 어디로도 전송되거나 저장되지 않습니다.