Regex Tester

정규식 테스터

실시간 매칭 하이라이트, capture group, 치환 모드로 정규식을 작성하고 테스트합니다. JavaScript 방언이며, 전부 브라우저에서 실행됩니다.

JavaScript / ECMAScript regex 입니다 (브라우저의 네이티브 RegExp 와 동일한 엔진). POSIX 의 엄격한 상위 집합이며, 일반적인 기능 면에서 Python re, Java Pattern, PCRE 와 많이 겹칩니다. 주의할 차이점: JavaScript 는 lookahead/lookbehind, 이름 있는 그룹 (/(?...)/), /u 와 /y 플래그를 지원합니다. 반면 possessive 수량자 (a++, a*+), atomic group ((?>...)), branch-reset 그룹은 지원하지 않습니다 — 이들은 PCRE 전용입니다.

아닙니다. 도구 전체가 이 페이지 안의 JavaScript 입니다. 패턴 컴파일, 매칭, 치환 모두 브라우저에서 네이티브 RegExp 생성자를 통해 실행됩니다. DevTools → Network 를 열어 보면 입력 중에 어떤 요청도 발생하지 않음을 알 수 있습니다. 운영 로그, 고객 이메일 등 서버 도구에 기록되기를 원치 않는 regex 도 안심하고 붙여넣을 수 있습니다.

/ /
매칭 결과
설명
Regex 치트시트
. 임의의 문자 (줄바꿈 제외; /s 플래그가 있으면 줄바꿈도 포함)
\d 임의의 숫자 (0-9)
\D 숫자가 아닌 문자
\w 단어 문자 (a-z, A-Z, 0-9, _)
\W 단어가 아닌 문자
\s 공백 문자 (스페이스, 탭, 줄바꿈)
\S 공백이 아닌 문자
\b 단어 경계
^ $ 문자열의 시작 / 끝 (또는 /m 플래그가 있으면 줄의 시작 / 끝)
* 직전 요소의 0회 이상 반복
+ 직전 요소의 1회 이상 반복
? 직전 요소의 0회 또는 1회 (선택적)
{n,m} 직전 요소의 n회 이상 m회 이하 반복
(...) Capture group — $1, $2, … 에 저장됩니다
(?:...) Non-capture group — 캡처 없이 분기를 묶을 때 유용합니다
(?<n>...) 이름 있는 capture group — $<n> 으로 참조합니다
[abc] 문자 클래스 — a, b, c 중 하나
[^abc] 부정 문자 클래스 — a, b, c 를 제외한 모든 문자
a|b 분기 — a 또는 b 와 매칭
(?=...) Positive lookahead — 뒤에 ~가 오는 경우
(?!...) Negative lookahead — 뒤에 ~가 오지 않는 경우
(?<=...) Positive lookbehind — 앞에 ~가 오는 경우
(?<!...) Negative lookbehind — 앞에 ~가 오지 않는 경우
$1 $<n> 치환 문자열에서의 backreference — 번호 또는 이름으로 지정

왜 iKit Regex Tester 인가

구식 도구의 광고, 팝업, 서드파티 추적기 없이 깔끔하고 빠른 regex 플레이그라운드를 원하는 개발자를 위해 만들었습니다.

실시간 매칭 하이라이트

패턴을 입력하면 테스트 문자열의 모든 매칭이 실시간으로 강조됩니다. capture group 은 인덱스 범위와 내용을 함께 옆에 표시합니다.

매칭과 치환을 한 도구에서

치환 모드로 전환하면 String.replace 의 결과를 미리 볼 수 있으며, $1/$2 번호 backreference, $ 이름 그룹, 전체 매칭을 가리키는 $& 를 모두 지원합니다.

JavaScript 6개 플래그 모두 지원

global, 대소문자 무시, multiline, dotall, unicode, sticky 를 칩 형태로 토글합니다 — 네이티브 RegExp 와 동일한 플래그여서 코드로 옮길 때 의외의 차이가 없습니다.

자주 쓰는 패턴 프리셋

이메일, URL, IPv4, 전화번호, 날짜, hex 색상, UUID 를 한 번의 클릭으로 적용합니다 — 각 프리셋에는 어떤 입력이 매칭되는지 확인할 수 있는 샘플 문자열도 함께 제공됩니다.

내장 치트시트

문자 클래스, 수량자, 앵커, 그룹, lookaround 를 위한 빠른 참조 표 — 접고 펼 수 있어서 필요할 때 보고 필요 없을 땐 숨길 수 있습니다.

설계 단계부터 프라이버시

패턴, 테스트 문자열, 치환 문자열은 모두 브라우저 안에 머무릅니다. DevTools → Network 에서 입력 중에 어떤 요청도 발생하지 않음을 직접 확인할 수 있습니다. 운영 로그와 고객 데이터에 사용해도 안전합니다.

정규식 매칭은 실제로 어떻게 동작하는가

정규식은 외계어처럼 보이지만, 그 뒤에서 동작하는 엔진은 단순합니다.

  1. 1

    패턴을 컴파일합니다

    JavaScript 에서 /foo/ 를 작성하거나 new RegExp('foo') 를 호출하면, 엔진은 패턴을 내부 오토마타 — 입력 텍스트를 따라 이동하는 방법을 아는 상태 기계 — 로 파싱합니다. 컴파일은 단 한 번이며, 매칭은 빠릅니다.

  2. 2

    입력 문자열을 따라 이동합니다

    엔진은 테스트 문자열을 따라 커서를 옮깁니다. 각 위치에서 오토마타의 경로를 따르려고 시도하며, 현재 상태를 만족하는 문자가 있으면 커서를 함께 진행시키고, 일치하지 않으면 이전 분기점으로 백트래킹하여 다른 분기를 시도합니다.

  3. 3

    Capture group

    패턴 안의 괄호는 capture group 을 엽니다. 엔진이 그 안쪽 매칭에 성공하면, 매칭된 내용을 기억하여 $1, $2 등으로 인덱싱합니다. 이름 있는 그룹 (?<n>...) 은 이름으로 저장됩니다. 이 캡처들은 매칭 객체의 groups 필드에 나타납니다.

  4. 4

    backreference 로 치환

    String.replace(regex, replacement) 는 동일한 매칭들을 따라가지만, 그것을 반환하는 대신 치환 문자열을 끼워 넣습니다. 치환 문자열의 $1 은 그룹 1 이 캡처한 실제 값이므로 — 단 하나의 regex 로 2024-01-1515/01/2024 로 재포맷할 수 있습니다.

자주 만나는 regex 작업

regex 테스터를 꺼내 들게 되는 실제 상황들입니다.

이메일 또는 URL 형식 검증

테스터에서 패턴을 만들고, 실제 입력값과 엣지 케이스를 함께 붙여넣어 폼 검증에 반영하기 전에 정확히 무엇이 매칭되는지 확인하세요. 프리셋은 실세계 입력의 95%를 처리하는 합리적인 출발점을 제공합니다.

로그 데이터 정리

타임스탬프, ANSI 색상 코드, 가리고 싶은 IP 주소가 뒤섞인 로그 파일이 있나요? 치환 모드에서 \b(?:\d{1,3}\.){3}\d{1,3}\b 같은 패턴과 [REDACTED] 치환을 사용하여 — 실제 파일에 sed 를 돌리기 전에 결과를 미리 봅니다.

regex 찾아 바꾸기로 코드 리팩터링

IDE 의 찾아 바꾸기는 regex 를 지원하지만, 여러 테스트 케이스에 걸친 실시간 미리보기는 보여주지 않습니다. 코드베이스의 샘플 라인으로 여기서 먼저 패턴을 만들고, 캡처와 치환을 검증한 뒤, 동작하는 regex 를 VS Code / IntelliJ 에 붙여넣으세요.

구조화된 데이터 추출

연락처 덤프에서 모든 이메일 주소를 뽑거나, 영수증에서 모든 달러 금액을 뽑아야 하나요? iKit 에서 매칭 regex 를 만들고 한 줄짜리 스크립트 (text.matchAll(re)) 에 복사해 넣으면, 즉흥적인 파싱 작업이 열 줄짜리 코드가 됩니다.

왜 로컬 regex 테스트가 중요한가

regex 패턴은 종종 민감한 정보를 담습니다: 고객 ID 의 구조, 내부 API 엔드포인트, 비밀번호 규칙, 가리려는 PII 필드 등. 그것을 서버 측 도구에 붙여넣고 — 실제 테스트 데이터까지 함께 붙여넣으면 — 패턴과 입력이 모두 유출됩니다. iKit 의 regex 테스터는 이미 브라우저 탭에 로드된 JavaScript 입니다.

  • 매칭이나 치환 중에 네트워크 요청이 0건 — DevTools 에서 직접 검증 가능합니다.
  • 패턴과 테스트 문자열은 브라우저 메모리에만 머물며, 지우기 또는 페이지 새로고침 시 삭제됩니다.
  • 운영 로그 마스킹 패턴, 고객 데이터 검증, 보안에 민감한 regex 에도 안전합니다.

관련 가이드

iKit 블로그의 심층 튜토리얼과 도구 비교 글입니다.

자주 묻는 질문

어떤 regex 방언을 지원하나요?

JavaScript / ECMAScript regex 입니다 (브라우저의 네이티브 RegExp 와 동일한 엔진). POSIX 의 엄격한 상위 집합이며, 일반적인 기능 면에서 Python re, Java Pattern, PCRE 와 많이 겹칩니다. 주의할 차이점: JavaScript 는 lookahead/lookbehind, 이름 있는 그룹 (/(?...)/), /u 와 /y 플래그를 지원합니다. 반면 possessive 수량자 (a++, a*+), atomic group ((?>...)), branch-reset 그룹은 지원하지 않습니다 — 이들은 PCRE 전용입니다.

내가 입력한 패턴이나 테스트 문자열이 어딘가로 업로드되나요?

아닙니다. 도구 전체가 이 페이지 안의 JavaScript 입니다. 패턴 컴파일, 매칭, 치환 모두 브라우저에서 네이티브 RegExp 생성자를 통해 실행됩니다. DevTools → Network 를 열어 보면 입력 중에 어떤 요청도 발생하지 않음을 알 수 있습니다. 운영 로그, 고객 이메일 등 서버 도구에 기록되기를 원치 않는 regex 도 안심하고 붙여넣을 수 있습니다.

치환에서 $1 과 $<name> 의 차이는 무엇인가요?

둘 다 치환 문자열에서의 backreference 입니다. $1, $2, … 는 패턴에 등장한 순서대로 번호 capture group 을 참조합니다 — (foo)(bar) 면 $1 = 'foo', $2 = 'bar' 입니다. $ 은 (?...) 으로 선언된 이름 있는 capture group 을 참조합니다 — 가독성이 더 좋고, 패턴 안에서 그룹 순서를 바꿔도 영향이 없습니다. JavaScript 에는 $& (전체 매칭), $` (매칭 앞 텍스트), $' (매칭 뒤 텍스트) 도 있습니다.

lookbehind 가 왜 동작하지 않을까요?

lookbehind (?<=...) 와 (?

이모지, 악센트 문자, 비라틴 문자를 어떻게 매치하나요?

/u (unicode) flag를 켠 다음, pattern 안에서 Unicode property escapes를 사용하세요. `\p{L}`은 모든 문자와 매치됩니다 — ñ, é, 中, ก, ا 포함. `\p{N}`은 ٠-٩ 같은 비라틴 숫자를 포함한 모든 숫자와 매치됩니다. `\p{Emoji}`는 이모지 code points와 매치됩니다. /u 없이는 같은 pattern이 surrogate pair 이모지 (BMP 바깥의 모든 것)에서 조용히 실패하고, 악센트 문자를 별도의 base + combining marks로 취급합니다. /u flag는 엔진에게 입력을 raw UTF-16 code units이 아닌 Unicode code points로 해석하도록 지시합니다 — 따라서 대부분의 언어 간 regex 버그가 하나의 토글로 사라집니다.