Skip to content

무료 정규식 테스터 — 패턴을 웹에서 디버그하고 일치 확인하기

정규 표현식을 모든 텍스트에 즉시 온라인 테스트합니다. 일치 강조, 캡처 그룹, 치환 미리보기, 분할, 설명 지원. JavaScript 정규식, 100% 비공개, 가입 없음.

트래킹 없음 브라우저 실행 무료
모든 테스트는 브라우저 안에서 로컬로 이루어집니다. 패턴과 텍스트는 이 기기를 벗어나지 않습니다.
플래그
강조된 일치
일치 결과 & 캡처 그룹
ECMA-262 충실도, 캡처 그룹 정확성(/d 플래그 유무 포함), String.prototype.replace와의 치환 템플릿 패리티, 벽시계 예산을 통한 ReDoS 저항성, 그리고 접근성(ARIA 역할, 스크린 리더 일치 안내, RTL/LTR 처리)에 대해 검토 완료 — Go Tools 텍스트 도구 팀 · May 21, 2026

정규식 테스터란 무엇인가요?

정규식 테스터(정규 표현식 테스터)는 정규식 패턴을 작성하고 테스트 텍스트를 붙여넣은 뒤, 코드를 다시 컴파일하거나 스크립트를 실행하지 않고도 패턴이 정확히 무엇에 일치하는지 — 캡처 그룹, 치환 미리보기, 플래그 분해와 함께 — 볼 수 있게 해 주는 도구입니다. 개발자에게는 반복 주기를 분 단위에서 밀리초 단위로 줄여 줍니다. 패턴을 다듬고, 강조가 움직이는 모습을 보고, 자신감을 가지고 정규식을 출시할 수 있습니다.

정규 표현식은 텍스트 패턴을 기술하는 간결한 언어입니다. `\d+`는 하나 이상의 숫자에 일치합니다. `[A-Za-z_]\w*`는 일반적인 식별자에 일치합니다. `(?\d{4})-(?\d{2})-(?\d{2})`는 ISO 날짜에 일치하면서 각 부분에 이름을 부여합니다. 정규 표현식은 모든 코드 편집기의 찾기·치환, 모든 폼의 검증, 모든 관측 가능성 스택의 로그 파싱, 그리고 인터넷의 절반을 받치는 유닉스 도구인 `grep`, `sed`, `awk`의 근간입니다. 그리고 올바르게 작성하기로 악명 높습니다. 수량자 하나가 하나 어긋나거나 이스케이프 하나가 빠지면 잘못된 부분 문자열에 일치하거나, 일치를 통째로 놓치거나, 최악의 경우 CPU 코어를 인질로 잡는 치명적 백트래킹을 유발할 수 있습니다. 좋은 정규식 테스터는 이런 실패 양상이 프로덕션에 도달하기 전에 잡아냅니다.

본 테스터는 모든 최신 브라우저에 탑재된 네이티브 ECMA-262 RegExp 엔진을 사용합니다. JavaScript, TypeScript, Node.js, Deno, Bun에서 호출하는 동일한 엔진입니다. 즉, 캡처 그룹(번호 및 `(?...)`로 이름 부여), 전·후방 탐색 단언(`(?=...)`, `(?!...)`, `(?<=...)`, `(?

원시 일치 외에 테스터가 표면화하는 것: 일치 결과 & 캡처 그룹 패널은 모든 일치를 [start, end) 오프셋과 함께 나열하고 각 캡처 그룹의 값을 보여 줍니다. /d 플래그를 사용한 `String.prototype.matchAll`에서 얻을 수 있는 것과 동일한 정보지만, 시각적으로 훑어보기 쉽게 배치되어 있습니다. 치환 탭은 $1 / $& / $` / $' / $$ / $ 템플릿 알파벳 전체를 지원하는 실시간 치환 미리보기를 보여 줍니다. 정확히 JavaScript의 String.replace가 받는 그대로입니다. 분할 탭은 정규식과 함께 String.split을 적용하고 각 부분을 보여 줍니다. 설명 탭은 패턴을 토크나이즈하고 각 조각에 평이한 한국어로 주석을 답니다. 코드 리뷰, 교육, 방언 간 이식에 유용합니다.

프라이버시: 모든 동작이 로컬입니다. 패턴과 테스트 텍스트는 페이지를 벗어나지 않습니다. 로그에 남지 않고, 분석 서비스로 전송되지 않으며, 디스크에 저장되지도 않습니다. UI 설정(활성 탭과 자주 켜 두는 플래그)만 localStorage에 유지됩니다. 그래서 본 도구는 마스킹한 로그 샘플, 사내 패턴, 내부 설정, 데이터 스키마에 대한 단서가 포함된 패턴에도 안전합니다. regex101 같은 서버 기반 테스터와 비교하면 프라이버시와 지연 면에서 엄밀히 더 낫습니다. 트레이드오프는 단일 계열 지원(JavaScript만)입니다.

정규식이 처음이라면 일반 패턴 드롭다운에 입증된 시작 패턴이 준비되어 있습니다. 이메일 주소, URL, IPv4, UUID, 16진 색상, ISO 날짜, 미국 전화번호, 그리고 후행 공백 제거 패턴입니다. 하나를 불러와 제공된 샘플 텍스트에 대한 일치를 관찰한 뒤, 패턴을 한 글자씩 변형하면서 엔진이 어떻게 반응하는지 체감해 보십시오. 정규식 기반 정리의 전후를 비교하고 싶다면 텍스트 비교를, 입력이나 기대 출력이 JSON이라면 JSON 포맷터를, 일치 대상 문자열이 URL 인코딩되어 있다면 URL 인코더를 함께 사용하십시오.

// The pattern you build in this tester drops straight into JavaScript.
// Example: extract every ISO date from a string with named groups.

const pattern = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/g;
const text = 'shipped 2026-05-21, scheduled 2026-06-30';

for (const m of text.matchAll(pattern)) {
  console.log(m.groups.year, m.groups.month, m.groups.day);
  // → 2026 05 21
  // → 2026 06 30
}

// Same regex, used in a replace with $<name> templates:
text.replace(pattern, '$<day>/$<month>/$<year>');
// → 'shipped 21/05/2026, scheduled 30/06/2026'

// With the /d flag, every match carries [start, end] indices
// per capture group — the Matches panel uses this to paint offsets.
const p2 = /(?<year>\d{4})-(?<month>\d{2})/gd;
const m = [...text.matchAll(p2)][0];
m.indices.groups.year; // [8, 12]

주요 기능

실시간 일치 강조

패턴이 파싱되는 즉시 테스트 텍스트의 모든 일치가 빛납니다. 교차 색상 덕분에 인접한 일치도 시각적으로 세기 쉽고, 결과 위의 카운트 배지가 정확한 총합을 알려 줍니다. 실행 버튼도 없고, 200ms를 넘는 디바운스 지연도 없습니다.

캡처 그룹 사이드 패널

우측의 일치 결과 & 캡처 그룹 패널은 각 일치를 카드로 나열합니다. [start, end) 오프셋, 전체 일치 텍스트, 그리고 그 안의 모든 위치 기반 + 이름 있는 캡처 그룹을 보여 줍니다. 이름 있는 그룹은 $으로 스스로 라벨링하므로, 코드에서 소비할 방식 그대로 데이터를 읽을 수 있습니다.

$1 / $& / $을 지원하는 실시간 치환 미리보기

치환 탭으로 전환해 치환을 실시간으로 적용된 모습을 보십시오. 전체 ECMAScript 치환 알파벳이 동작합니다. 위치 기반의 $1..$N, 이름 기반의 $, 전체 일치의 $&, 접두/접미의 $`와 $', 리터럴 달러의 $$. 입력과 출력 패널이 나란히 배치되어 한 번의 클릭으로 복사할 수 있습니다.

정규식 경계로 분할

분할 탭은 사용자의 정규식으로 String.prototype.split을 호출하고 각 부분을 번호 매긴 목록으로 보여 줍니다. 빈 부분은 ⏎ 글리프로 렌더링되어 인접한 구분자를 엔진이 어떻게 처리했는지 볼 수 있습니다. CSV 유사 입력 정리를 디버그할 때 유용합니다.

패턴 설명기(토큰 단위)

설명 탭은 패턴을 토큰화해 클래스(이스케이프 / 수량자 / 문자 클래스 / 그룹 / 앵커 / 대체)별로 색상이 입혀진 칩으로 만들고, 각 칩에 한 줄 설명을 답니다. 출시 전에 자신의 정규식을 자기 자신에게 다시 읽어 주십시오. 코드 리뷰나 교육에도 활용하십시오.

ReDoS 안전(벽시계 타임아웃)

모든 일치 호출은 250밀리초 예산으로 감싸여 있습니다. `(a+)+`, `(a|aa)+b`, 깊게 중첩된 수량자 같은 전형적인 치명적 백트래킹 형태는 패턴 시간 초과 경고와 함께 깨끗하게 중단됩니다. 페이지는 탭을 잠그는 대신 응답 상태를 유지합니다. 서버 측 샌드박스 없이도 감지할 수 있습니다.

일반 패턴 라이브러리

개발자가 가장 자주 손이 가는 여덟 가지 패턴에 대한 입증된 시작 패턴: 이메일, URL, IPv4, UUID v4, 16진 색상, ISO 날짜, 미국 전화번호, 후행 공백 제거. 각 패턴은 일치하는 샘플과 함께 로드되어, 변형하기 전에 정규식이 동작하는 모습을 볼 수 있습니다.

영구 링크 공유(업로드 없음)

링크 복사는 패턴 + 플래그 + 샘플 텍스트를 URL 해시(#p=…&f=gim&t=…)에 인코딩합니다. 브라우저는 URL 프래그먼트를 요청에 담아 전송하지 않으므로, 공유된 링크는 go-tools.org 서버를 거치지 않고 수신자의 기기에서 상태를 재현합니다. 자기 완결적이며 감사에 친화적입니다.

100% 비공개, 브라우저 전용

사용자의 정규식과 테스트 텍스트는 기기를 벗어나지 않습니다. 네트워크 요청도, 로그도, 입력 분석도 없습니다. DevTools → Network에서 직접 확인하십시오. 입력해도 요청이 한 건도 발생하지 않습니다. 사내 패턴, 마스킹한 로그, regex101에 붙여넣고 싶지 않은 모든 텍스트에 안전합니다.

실전 예시

단락에서 모든 이메일 주소 추출

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

/g 플래그를 켠 상태에서 패턴을 붙여넣고, 테스트 텍스트에 단락을 넣으면 모든 이메일이 강조된 뷰에서 빛납니다. 우측의 일치 결과 & 캡처 그룹 패널은 각 주소를 [start, end) 오프셋과 함께 나열합니다. 동일한 정규식을 grep, sed, 코드 편집기로 흘려보낼 때 유용합니다.

이름 있는 그룹으로 날짜 구성 요소 캡처

(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})
/(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/g

ECMA-262 이름 있는 그룹은 우측 패널에 $, $, $로 표시됩니다. 치환 탭으로 전환해 $/$/$를 시도하면 ISO 날짜를 DMY 형식으로 한 번에 다시 포맷할 수 있습니다. 같은 기법은 모든 최신 JS replace 호출에서 동일하게 동작합니다.

$1 역참조로 찾아 치환

(\w+) (\w+)
치환 템플릿: $2, $1   →   Jack Doe → Doe, Jack

이름 없는 캡처 그룹 두 개, 치환 템플릿 $2, $1, 그리고 치환 탭은 실시간 미리보기를 보여 줍니다. $&, $`, $', $$, $이 모두 지원됩니다. ECMAScript 명세의 치환 알파벳 그대로이므로, 복사해 가져간 결과는 어떤 JS 엔진에서도 변경 없이 동작합니다.

줄 단위로 후행 공백 제거

[ \t]+$
/[ \t]+$/gm

/g (전역)과 /m (다중 행) 플래그를 결합하면 $가 입력 끝뿐 아니라 모든 줄 끝에 고정됩니다. 빈 치환을 적용한 치환 탭 미리보기에 깨끗한 차이가 표시됩니다. 후행 탭과 공백은 사라지고 본문은 그대로 남습니다. /s (dotAll) 플래그가 꺼져 있으면 .은 줄바꿈을 넘지 않습니다.

치명적 백트래킹 감지와 안전한 처리

(a+)+b
테스트 텍스트: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac

중첩된 + 수량자는 전형적인 ReDoS 패턴을 만듭니다. 순진한 테스터에서는 탭이 멈춥니다. 본 도구는 250ms의 벽시계 가드가 발동하면서 패턴 시간 초과 배너가 나타나고 페이지는 응답 상태를 유지합니다. 패턴을 고정하거나, 중복 없는 대체로 바꾸거나, 원자 그룹 유사 표현을 사용한 뒤 다시 테스트하십시오.

혼합 구분자로 CSV 유사 줄 분할

[,;|]\s*
alpha, beta; gamma | delta → ["alpha", "beta", "gamma", "delta"]

분할 탭으로 전환하십시오. 쉼표, 세미콜론, 파이프 뒤에 선택적 공백이 오면 모두 분할 경계가 됩니다. 복사·붙여넣기한 태그 목록을 정리하거나, 사용자 입력을 정규화하거나, 실제 CSV 파서에 넣기 전에 로그 필드를 전처리할 때 유용합니다. 데이터가 정말로 RFC 4180이라면 CSV to JSON을 참고하십시오.

정규식 테스터 사용 방법

  1. 1

    슬래시 사이에 패턴을 입력하십시오

    ECMA-262 정규 표현식을 /…/ 입력란에 넣으십시오. 잘못된 패턴은 파서 메시지와 함께 빨간색으로 강조됩니다. 유효한 패턴은 실시간 일치로 이어집니다.

  2. 2

    필요한 플래그를 토글하십시오

    g (전역), i (대소문자 무시), m (다중 행), s (dotAll), u (유니코드), y (sticky), d (인덱스). 각 칩은 켜져 있을 때 빛납니다. 패턴 우측의 표시 영역에 정규 형식의 리터럴이 보입니다.

  3. 3

    테스트 텍스트를 붙여넣으십시오

    입력하는 동안 일치가 교차 색상으로 강조됩니다. 우측의 일치 결과 & 캡처 그룹 패널은 모든 일치를 [start, end) 오프셋과 함께 나열하고 각 캡처 그룹의 값(이름 있는 그룹은 $으로 라벨)을 보여 줍니다.

  4. 4

    치환, 분할, 설명을 위해 탭을 전환하십시오

    치환은 입력 옆에 치환 템플릿을 미리 봅니다. 분할은 모든 일치 경계에서 텍스트를 잘라냅니다. 설명은 패턴을 토큰 단위로 분해해 요소마다 평이한 한국어 설명을 제공합니다.

  5. 5

    리터럴을 복사하거나 영구 링크를 공유하십시오

    /pattern/flags 복사는 JavaScript / TypeScript / Node에서 그대로 사용할 수 있는 정규 형식의 정규식 리터럴을 클립보드로 옮깁니다. 링크 복사는 전체 상태를 URL 해시(업로드 없음)에 인코딩하므로 동료가 로컬에서 그대로 재현할 수 있습니다.

흔한 정규식 실수

/g 플래그를 잊어 일치가 하나만 나옴

/g (또는 /y) 없이 엔진은 첫 일치 후 멈춥니다. match, matchAll, replace, split 메서드는 모두 전역 플래그를 두고 다르게 동작합니다. /g를 토글해 다시 실행하면 결과 위의 카운트가 1에서 N으로 뜁니다.

✗ 오류
패턴: /\d+/  →  '1 22 333'은 ['1']만 반환
✓ 정상
패턴: /\d+/g  →  '1 22 333'은 ['1', '22', '333'] 반환

이 도구를 사용하는 사람들

출시 전에 폼 입력 검증
이메일 / 전화 / 우편번호 / 사용자명 정규식이 기대한 값에 일치하고 그렇지 않은 값을 거부하는지 — 엣지 케이스(유니코드 이름, 플러스 별칭, 국제 형식)까지 — 검증이 프로덕션에 도달해 실제 사용자를 튕겨내기 전에 확인하십시오.
로그와 설정에서 데이터 추출
임의의 로그 슬라이스에서 요청 ID, 상태 코드, 지연 시간, 스택 트레이스 줄을 뽑아내는 패턴을 만드십시오. 이름 있는 그룹이 데이터를 자기 문서화로 만들고, 일치 결과 패널이 오프셋을 보여 주므로, 이후 동일한 정규식을 `rg --replace`나 `grep -oE`로 흘려보낼 수 있습니다.
코드베이스 전반의 찾아 치환
리팩토링 패턴 초안(예: `(\w+)\.apply\(null,\s*\[(.*?)\]\)` → `$1($2)`)을 여기서 작성하고, 대표 스니펫에 대한 치환을 미리 본 뒤, 검증된 정규식을 편집기의 프로젝트 전역 찾아 바꾸기에 자신감을 가지고 붙여넣으십시오.
온라인에서 찾은 패턴 점검
StackOverflow나 블로그에서 가져온 정규식을 설명 탭에 넣으십시오. 모든 토큰에 평이한 한국어 주석이 붙습니다. `.+`를 원했는데 `.+?`로 쓰여 있거나, `^`/`$` 앵커가 빠졌거나, 의도치 않게 탐욕적인 수량자처럼 미묘한 문제를 정규식이 코드에 들어가기 전에 잡아냅니다.
팀원에게 정규식 가르치기
동작하는 패턴에 설명 탭을 열고 토큰 단위로 함께 살펴보십시오. 색상 코딩(이스케이프 / 수량자 / 문자 클래스 / 그룹 / 앵커 / 대체)으로 학습자는 문자 자체가 아니라 정규식의 구조적 형태를 볼 수 있습니다.
언어 간 패턴 이식
JavaScript에서 사용해야 할 Python이나 PCRE 정규식이 있나요? 여기에 붙여넣으십시오. 파싱되면 설명기가 JS에서 동등한 의미를 보여 주고, 파싱되지 않으면 파서 오류가 문제의 구성 요소(원자 그룹, 소유 수량자, 인라인 `(?i)`)를 짚어 주어 무엇을 다시 작성해야 하는지 정확히 알 수 있습니다.
느린 프로덕션 정규식 디버그
서버 정규식에 치명적 백트래킹이 의심된다면 입력 샘플과 함께 본 테스터에 붙여넣으십시오. 250ms 벽시계 가드가 병적 사례에서 발동하여 프로파일러 도구에 손을 뻗기 전에 즉각적인 진단을 제공하고, 설명기는 중첩 수량자 근본 원인을 가리킵니다.

엔진 & 알고리즘 노트

ECMA-262 RegExp 엔진(네이티브 브라우저)
`new RegExp(pattern, flags)`와 V8 / JavaScriptCore / SpiderMonkey에 탑재된 엔진을 사용합니다. JavaScript 어디서나 얻는 정규식 의미와 동일합니다. 여기서 검증된 패턴은 Node.js, Deno, Bun, 모든 최신 브라우저에서 변경 없이 동작합니다.
String.matchAll을 통한 일치 순회
전역 순회는 수동 lastIndex 루프가 아니라 `text.matchAll(regex)`를 사용하므로, 모든 일치가 캡처 그룹, 이름 있는 그룹, /d와 함께 [start, end] 인덱스를 모두 포함합니다. 너비 0 일치는 무한 루프를 피하기 위해 표준 +1 lastIndex 진행으로 처리됩니다.
ReDoS 보호를 위한 벽시계 타임아웃
250밀리초 예산이 모든 일치, 치환, 분할 호출을 감쌉니다. 엔진은 단일 일치 시도 내에서는 여전히 내부적으로 백트래킹할 수 있지만, 외부 순회는 예산과 협력합니다. 병적 패턴은 `timedOut: true`로 중단되고 UI가 탭을 잠그는 대신 경고를 표면화합니다.
치환 템플릿 재구현
치환 탭은 $1..$N, $&, $`, $', $$, $을 `String.replace`에 위임하지 않고 직접 파싱하므로, 이름 있는 그룹 템플릿에 엣지 케이스가 있는 엔진(구형 Safari, 구형 Node)에서도 미리보기가 동일하게 동작합니다. 출력은 현재 JavaScript 엔진이 만들어 내는 결과와 정확히 같습니다.
설명기를 위한 패턴 토크나이저
설명 탭은 직접 작성한 토크나이저를 실행해 각 패턴 조각을 분류합니다(이스케이프 / 메타 문자 / 수량자 / 문자 클래스 / 그룹-열기 / 그룹-닫기 / 앵커 / 대체). 익숙하지 않은 구성 요소는 일반 주석과 함께 `literal`로 떨어지므로 설명기가 콘텐츠를 조용히 빠뜨리는 일이 없습니다.
URL 해시를 통한 영구 링크(전송되지 않음)
공유 상태는 location.hash 프래그먼트(`#p=…&f=…&t=…&tab=…`)에 인코딩됩니다. 브라우저는 프래그먼트를 HTTP 요청에 담아 전송하지 않으므로, 영구 링크가 열리더라도 go-tools.org 서버는 데이터를 한 건도 받지 않습니다. 복원은 전적으로 수신자의 기기에서 이루어집니다.

정규식 모범 사례

의도할 때만 패턴을 고정하라
`^pattern$`은 정확한 문자열에 일치하고, `pattern`은 어디서든 일치합니다. 잘못된 선택은 폼 검증에서 가장 흔한 버그입니다. `^`가 빠지면 선두의 `attacker.com/`이 도메인 검사를 통과해 슬쩍 들어옵니다. `$`가 빠지면 후행 쓰레기가 통과합니다. 일부러 깨뜨린 샘플에 대해 일치 탭을 사용해 무엇이 거부되는지 확인하십시오.
순수 구조에는 비캡처 그룹을 선호하라
`(?:foo|bar)+`와 `(foo|bar)+`는 기능상 동일하지만, 앞쪽은 캡처 그룹을 할당하지 않습니다. 그룹이 수량자나 대체를 위해서만 존재한다면 `(?:…)`에 손을 뻗으십시오. 번호 기반 $1..$N이 안정적으로 유지되고 엔진의 일도 약간 줄어듭니다.
ASCII 이상에는 /u 플래그를 사용하라
/u 없이 점과 `\w`는 서러게이트 페어 문자(이모지, 비BMP 코드 포인트)를 두 개의 UTF-16 단위로 처리합니다. /u가 있으면 각 한 개의 코드 포인트입니다. 사용자가 인식하는 방식 그대로입니다. /u는 `\p{Letter}`와 다른 속성 이스케이프도 활성화합니다. 특별한 이유가 없다면 새 패턴에는 기본으로 /u를 사용하십시오.
캡처 그룹에 이름을 붙이라
`(?\d{4})-(?\d{2})`는 자기 문서화입니다. 6개월 뒤 정규식을 다시 읽었을 때 `m.groups.year`는 명백히 연도이지만 `m[1]`은 그렇지 않습니다. $으로 작성한 치환 템플릿은 그룹 순서 변경에서도 살아남습니다. 위치 기반 템플릿은 누군가 그룹을 하나 추가하는 순간 깨집니다.
성공뿐 아니라 실패 사례도 테스트하라
정규식 테스터는 실패를 위한 도구입니다. 패턴이 일치하는 것을 확인한 뒤, 테스트 텍스트를 의도적으로 변형해 일치하지 않는 것이 무엇인지 보십시오. 선행 공백, 후행 공백, 누락된 부분, 추가된 부분, 잘못된 대소문자, 혼합 문자 체계입니다. 유효한 입력은 통과시키지만 쓰레기도 받아들이는 패턴이 프로덕션이 가장 먼저 노출하는 버그입니다.

자주 묻는 질문

제 정규식이나 테스트 텍스트가 서버로 전송되나요?
아닙니다. 모든 일치, 치환, 분할, 설명 동작은 브라우저 안의 JavaScript에서 네이티브 RegExp 엔진을 통해 실행됩니다. 패턴과 텍스트는 업로드되지 않고, 로그에도 남지 않으며, 디스크에 저장되지도, 어떤 서드파티로도 전송되지 않습니다. UI 설정(활성 탭과 자주 켜 두는 플래그)만 localStorage에 저장되어 다음 방문 시 페이지가 기억합니다. 패턴이나 테스트 텍스트는 결코 저장되지 않습니다. DevTools → Network를 열고 어느 쪽 입력란에든 입력해 보면 요청이 한 건도 발생하지 않음을 확인할 수 있습니다. 이로써 본 도구는 사내 패턴, 마스킹한 로그 샘플, 내부 설정 등 regex101에 붙여 넣고 싶지 않은 모든 자료에 안전합니다.
이 테스터는 어떤 정규식 계열을 사용하나요 — PCRE, Python, Java, JavaScript?
ECMA-262 (JavaScript) 계열입니다. V8, JavaScriptCore, SpiderMonkey가 구현하는 방언으로, 어떤 브라우저, Node.js, Deno, Bun에서든 `new RegExp(pattern, flags)`로 얻는 엔진과 동일합니다. 지원 기능은 다음과 같습니다. 캡처 그룹(번호 + `(?...)`로 이름 부여), 전방 탐색 `(?=...)`과 `(?!...)`, 후방 탐색 `(?<=...)`과 `(?...)`, 소유 수량자 `a++`, 조건부 `(?(1)yes|no)`, 인라인 수정자 `(?i)`는 구문 오류를 반환합니다. Python의 `re.VERBOSE`는 본 도구에서 지원되지 않습니다. Python/Java/Go 정규식의 경우 네이티브 엔진으로 패턴을 다시 옮기십시오. 단순한 패턴 대부분은 변경 없이 이식되며, 본 도구의 설명기는 계열 중립적입니다.
g, i, m, s, u, y, d 플래그는 각각 무엇을 하나요?
g (전역) — 첫 번째 일치만이 아니라 모든 일치를 찾습니다. .matchAll로 순회하거나 전역 치환을 할 때 필요합니다. i (대소문자 무시) — A와 a를 같은 문자로 일치시킵니다. m (다중 행) — ^와 $가 전체 입력의 시작/끝이 아니라 모든 줄 바꿈에 고정됩니다. s (dotAll) — .이 줄 바꿈에도 일치합니다. /s가 없으면 점은 \n에서 멈춥니다. u (유니코드) — \u{HHHH} 이스케이프, 유니코드 속성 이스케이프(\p{Letter})를 활성화하고, 패턴을 UTF-16 코드 단위가 아니라 유니코드 코드 포인트 시퀀스로 처리합니다. y (sticky) — 각 일치를 lastIndex에 고정합니다. 토크나이저에 유용합니다. d (hasIndices, ES2022) — `.indices`와 `.indices.groups`에 모든 캡처에 대한 [start, end] 쌍을 채워 넣습니다. 본 테스터는 그룹 경계를 그리기 위해 내부적으로 /d를 사용합니다. 테스트 텍스트 위의 칩으로 토글할 수 있고, 정규 형식의 /pattern/flags 리터럴이 표시 영역에 보입니다.
캡처 그룹을 어떻게 작성하고 어떻게 다시 참조하나요?
하위 패턴을 괄호로 감싸십시오. `(\d{4})-(\d{2})-(\d{2})`는 위치 기반 그룹 세 개를 제공하며, 치환에서는 $1, $2, $3로, 일치 결과 패널에서는 m.groups[0..2]로 접근합니다. 이름 있는 그룹에는 `(?...)`을 사용하십시오. `(?\d{4})-(?\d{2})`로 두면 치환 템플릿에서 $/$로 쓸 수 있습니다. 수량자에서만 그룹 묶음이 필요하다면 비캡처 그룹 `(?:...)`을 사용하십시오(`(?:foo|bar)+`). 역참조를 만들지 않으므로 번호 기반 $1..$N이 안정적으로 유지됩니다. 같은 패턴 안에서는 `\1`, `\2` 등으로 이전 캡처를 다시 참조할 수 있습니다. `\b(\w+)\s+\1\b`처럼 중복 단어를 찾는 데 유용합니다.
전방·후방 탐색은 어떻게 동작하고, 어디에 좋은가요?
주변 탐색(lookaround)은 너비가 0인 단언입니다. 문자를 소비하지 않고 무언가가 일치하는지(또는 일치하지 않는지) 확인합니다. `(?=foo)` (긍정 전방 탐색)은 현재 위치 뒤에 `foo`가 따라오면 성공합니다. `(?!foo)` (부정 전방 탐색)은 `foo`가 따라오지 않을 때 성공합니다. `(?<=foo)`와 `(?
정규식이 왜 브라우저를 멈추게 하나요? 치명적 백트래킹이란 무엇인가요?
치명적 백트래킹은 패턴에 겹치는 대체에 대해 중첩된 수량자가 있을 때 발생합니다. 전형적인 형태는 `(a+)+`, `(a|aa)+`, `(\w*)*`, `(?:a|a?)+`입니다. 마지막 문자에서 일치가 실패할 수 있는 입력에서, 엔진은 포기하기 전에 지수적인 수의 그룹 분할을 시도합니다. `aaaaaaaaaaaaaaaaaaaaab`에 패턴 `(a+)+b`를 적용하면 답이 나오기 전에 2^21 ≈ 200만 번의 백트래킹이 발생합니다. 본 테스터는 모든 일치 호출을 250ms의 벽시계 예산으로 감쌉니다. 예산을 초과하면 순회가 중단되고 패턴 시간 초과 경고가 표시됩니다. 해결책은 다음과 같습니다. 패턴을 경계에 고정하기(`^...$`), 겹치지 않는 대체 선호하기(`(a|aa)` 대신 `(a|b)`), 중첩 수량자 풀기(`(a+)+` 대신 `a+`), 소유 수량자 유사 표현으로 다시 작성하기(`(?=(a+))\1`은 JS에서 `a++`를 시뮬레이션합니다).
이 정규식 테스터는 regex101.com과 어떻게 다른가요?
세 가지 차이가 있습니다. (1) 프라이버시: regex101은 모든 키 입력을 백엔드 평가를 위해 서버로 전송하고 패턴을 공유 커뮤니티 링크에 저장합니다. 본 도구는 전부 브라우저 안에서 실행되며 네트워크 호출이 없습니다. (2) 속도: 변경할 때마다 발생하는 서버 왕복이 80-300ms를 더합니다. 본 도구는 긴 텍스트에서도 일치가 10ms 안에 갱신됩니다. (3) 계열 집중도: regex101은 기능 플래그 UI로 PCRE, Python, Java, .NET, JavaScript, Rust, Go를 지원합니다. 본 도구는 모든 브라우저, Node, Deno, Bun이 탑재하는 ECMA-262 (JavaScript) 한 계열에 집중하며, 설명기와 영구 링크도 이 단일 계열에 맞춰 조정되어 있습니다. PCRE 전용 기능이 필요하다면 여전히 regex101이 적합합니다. JavaScript / TypeScript 작업에는 본 도구가 더 빠르고 더 비공개적입니다. 본 도구의 영구 링크는 URL 해시(업로드 없음)이므로, 공유된 링크는 수신자의 기기에서 로컬로 패턴을 재현합니다.
. | ( ) [ ] { } * + ? ^ $ \ 같은 특수 문자를 어떻게 이스케이프하나요?
앞에 백슬래시를 두십시오. `\.`, `\|`, `\(`, `\)`, `\[`, `\]`, `\{`, `\}`, `\*`, `\+`, `\?`, `\^`, `\$`, `\\`. 슬래시 `/`는 문자열로 전달되는 패턴에서는 이스케이프가 필요 없습니다(JS 정규식 리터럴의 슬래시 사이에서만 필요). 문자 클래스 `[...]` 안에서는 대부분의 메타 문자가 특수한 의미를 잃으므로 `[.]`, `[*]`, `[+]`는 모두 리터럴 문자에 일치합니다. 특수한 의미를 유지하는 것은 `]`, `\`, `^` (부정용으로 맨 앞에 올 때만), `-` (두 문자 사이의 범위)뿐입니다. 확신이 서지 않으면 리터럴 텍스트를 패턴에 붙여넣고 설명기를 실행하십시오. 모든 이스케이프 시퀀스에 대해 분해 패널에서 한 줄짜리 설명이 제공됩니다.
동료에게 링크로 정규식을 공유할 수 있나요?
네, 그리고 링크에는 서버 왕복이 포함되지 않습니다. 동작 막대의 링크 복사를 누르면 테스터가 패턴, 플래그, 테스트 텍스트, 활성 탭을 URL 해시에 인코딩합니다(`#p=...&f=gim&t=...&tab=match`). 링크를 여는 사람은 자신의 기기에서 로컬로 동일한 상태로 페이지를 복원합니다. 데이터가 해시 프래그먼트에 있기 때문에 go-tools.org 서버로 전송되지 않으며(브라우저는 프래그먼트를 요청에 담지 않습니다) 접근 로그에도 남지 않습니다. 링크 길이는 텍스트 크기에 따라 늘어나므로, 2KB가 넘는 샘플에서는 /pattern/flags 복사로 정규식을 가져가고 텍스트는 따로 붙여넣으십시오. 실제 텍스트를 공유하지 않는 협업 리뷰에서는 패턴과 플래그만 공유하면 수신자가 자신의 코퍼스를 붙여넣어 같은 일치 결과를 얻습니다.
유니코드, 이모지, 비라틴 문자도 지원하나요?
네. /u 플래그를 켜서 전체 유니코드 처리를 선택하십시오. 기본 의미상 \w는 라틴 단어 문자에 일치하지만, /u가 켜져 있으면 유니코드 속성 이스케이프로 더 넓은 범주에 일치할 수 있습니다. `\p{Letter}`는 모든 문자 체계의 모든 글자에 일치하고, `\p{Script=Han}`은 한자에 일치하며, `\p{Emoji}`는 이모지에, `\p{Number}`는 모든 숫자에 일치합니다. /u 없이 👨‍💻 같은 서러게이트 페어 이모지는 UTF-16 코드 단위 두 개로 인식되어 `^.$` 같은 패턴이 일치하지 않습니다. /u가 켜져 있으면 점은 각 자소 코드 포인트를 한 문자로 처리합니다. RTL 문자(아랍어, 히브리어)에서는 별도 처리 없이 패턴이 동작합니다. 방향은 렌더링 단계의 관심사이지 정규식 엔진의 관심사가 아닙니다. CJK 콘텐츠도 라틴과 동일하게 일치합니다.
정규식과 함께 사용하는 .match, .matchAll, .replace, .split의 차이는 무엇인가요?
String.prototype.match는 첫 일치(또는 /g가 켜져 있을 때 모든 일치의 배열)를 반환하지만, /g가 켜져 있으면 캡처 그룹을 잃습니다. String.prototype.matchAll은 /g를 요구하며, 캡처 그룹과 인덱스를 모두 가진 일치 배열의 이터레이터를 반환합니다. 본 테스터가 내부적으로 사용하는 방식이 바로 이것입니다. String.prototype.replace는 문자열 템플릿($1, $& 등) 또는 일치마다 (match, ...groups, offset, string, namedGroups)로 호출되는 콜백을 받습니다. String.prototype.split은 모든 일치에서 분할합니다. /g와 함께 유용하지만 분할 의미상 전역 플래그는 무시됩니다. 본 도구는 일치 탭으로 match를, 치환 탭으로 replace를, 분할 탭으로 split을 노출하므로 페이지를 떠나지 않고 모든 동작을 미리 볼 수 있습니다. 코드에 붙여넣을 준비가 되면 리터럴 /pattern/flags는 한 번의 클릭으로 가져올 수 있습니다.
왜 Python이나 Java 정규식이 여기서 동작하지 않나요?
본 테스터가 ECMA-262 (JavaScript)를 실행하기 때문입니다. 대부분의 패턴은 깔끔하게 이식되지만 일부는 그렇지 않습니다. 흔한 이식 함정은 다음과 같습니다. (1) Python의 인라인 플래그 `(?i)`와 `(?x)`는 JS에서 유효하지 않습니다. 대신 위의 플래그 칩을 사용하십시오. (2) Python의 `\A`와 `\Z`는 JS에서 `^`와 `$`입니다(줄 단위 고정에는 /m). (3) Java/Python의 조건부 `(?(name)yes|no)`는 JS에서 지원되지 않습니다. 대체로 다시 작성하십시오. (4) 소유 수량자 `a++`와 원자 그룹 `(?>...)`은 JS에서 사용할 수 없습니다. `(?=(a+))\1`로 시뮬레이션하십시오. (5) Python의 `(?P...)`은 JS에서 `(?...)`입니다. (6) 수평 공백 `\h`와 수직 공백 `\v`는 JS에 없습니다. `[ \t]`와 `[\n\r]`을 사용하십시오. 이식 가능한 이식을 위해서는 설명기가 각 토큰의 역할을 분해해 보여 주므로, 지원되지 않는 구문을 동등한 표현으로 바꿀 수 있습니다.
텍스트 크기나 일치 개수의 최댓값이 있나요?
실용적 한계는 다음과 같습니다. 테스트 텍스트 약 200,000자, 한 번에 표시되는 강조 일치 500개입니다. 500개를 초과하면 일치 결과 패널에 처음 500개 표시 배너가 보입니다. 카운트 배지는 여전히 실제 총합을 보고합니다. 250ms 벽시계 예산은 크기와 무관하게 폭주 패턴을 제한합니다. 메가바이트 단위 로그 파일은 명령줄 `grep -oE`나 `rg` (ripgrep)로 정규식을 실행하십시오. 스트리밍 처리되어 UI 렌더링 상한에 걸리지 않습니다. 방대한 텍스트의 일회성 스캔이라면 본 테스터에 대표 슬라이스를 붙여넣어 패턴을 검증한 뒤, 검증된 패턴을 셸에서 전체 파일에 적용하십시오.

텍스트 비교 및 차이 분석

텍스트 도구

두 텍스트를 브라우저에서 즉시 비교. 좌우 대조 뷰, 인라인 단어 단위 하이라이트, 통합 diff 출력, 대소문자/공백/빈 줄 무시. 100% 브라우저 처리, 업로드 없음.

무료 글자 수 세기 & 단어 카운터

텍스트 도구

단어, 문자, 문장, 단락 수와 읽기 시간을 즉시 계산합니다. Twitter, 메타 설명, Instagram 길이 제한 검사를 실시간으로 지원하는 무료 브라우저 카운터입니다.

진법 변환기 (Number Base Converter)

변환 도구

2진수, 16진수, 10진수, 8진수 및 임의 진법(2-36)을 즉시 변환합니다. 온라인에서 무료로 사용할 수 있으며 모든 처리는 브라우저에서 이루어집니다.

Base64 디코더 · 인코더 (Base64 Decoder & Encoder)

인코딩 & 포매팅

Base64를 온라인에서 무료로 인코딩하고 디코딩합니다. UTF-8과 이모지를 완벽 지원하는 실시간 변환으로, 100% 브라우저에서 처리되어 회원 가입이 필요 없습니다.

crontab 생성기 & cron 표현식 빌더

날짜 & 시간

브라우저에서 cron 표현식을 만들고 검증·해석합니다. 로컬 또는 UTC로 다음 실행을 미리 보고, POSIX 5필드 문법과 프리셋을 온라인에서 무료로 사용합니다.

CSV to JSON 변환기 (CSV to JSON Converter)

인코딩 & 포매팅

브라우저에서 CSV를 JSON으로 변환합니다. RFC 4180, 타입 추론, 헤더 행, 큰 정수 안전 처리. 100% 비공개, 업로드 없음.