무료 정규식 테스터 — 패턴을 웹에서 디버그하고 일치 확인하기
정규 표현식을 모든 텍스트에 즉시 온라인 테스트합니다. 일치 강조, 캡처 그룹, 치환 미리보기, 분할, 설명 지원. JavaScript 정규식, 100% 비공개, 가입 없음.
본 팀은 정규식 출력을 ECMA-262 명세, Node.js RegExp 동작, V8 / JavaScriptCore / SpiderMonkey 간 패리티 테스트와 대조해 검증합니다. ReDoS 예산은 Snort와 OWASP regex-DoS 코퍼스의 문서화된 최악의 패턴을 기준으로 보정되었습니다.
정규식 테스터란 무엇인가요?
정규식 테스터(정규 표현식 테스터)는 정규식 패턴을 작성하고 테스트 텍스트를 붙여넣은 뒤, 코드를 다시 컴파일하거나 스크립트를 실행하지 않고도 패턴이 정확히 무엇에 일치하는지 — 캡처 그룹, 치환 미리보기, 플래그 분해와 함께 — 볼 수 있게 해 주는 도구입니다. 개발자에게는 반복 주기를 분 단위에서 밀리초 단위로 줄여 줍니다. 패턴을 다듬고, 강조가 움직이는 모습을 보고, 자신감을 가지고 정규식을 출시할 수 있습니다.
정규 표현식은 텍스트 패턴을 기술하는 간결한 언어입니다. \d+는 하나 이상의 숫자에 일치합니다. [A-Za-z_]\w*는 일반적인 식별자에 일치합니다. (?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})는 ISO 날짜에 일치하면서 각 부분에 이름을 부여합니다. 정규 표현식은 모든 코드 편집기의 찾기·치환, 모든 폼의 검증, 모든 관측 가능성 스택의 로그 파싱, 그리고 인터넷의 절반을 받치는 유닉스 도구인 grep, sed, awk의 근간입니다. 그리고 올바르게 작성하기로 악명 높습니다. 수량자 하나가 하나 어긋나거나 이스케이프 하나가 빠지면 잘못된 부분 문자열에 일치하거나, 일치를 통째로 놓치거나, 최악의 경우 CPU 코어를 인질로 잡는 치명적 백트래킹을 유발할 수 있습니다. 좋은 정규식 테스터는 이런 실패 양상이 프로덕션에 도달하기 전에 잡아냅니다.
본 테스터는 모든 최신 브라우저에 탑재된 네이티브 ECMA-262 RegExp 엔진을 사용합니다. JavaScript, TypeScript, Node.js, Deno, Bun에서 호출하는 동일한 엔진입니다. 즉, 캡처 그룹(번호 및 (?<name>...)로 이름 부여), 전·후방 탐색 단언((?=...), (?!...), (?<=...), (?<!...)), 일곱 가지 정규 플래그(g, i, m, s, u, y, d), /u 아래의 유니코드 속성 이스케이프(\p{Letter}, \p{Script=Han}), 그리고 \d 스타일의 문자 이스케이프를 모두 지원합니다. 여기서 검증한 패턴은 사용자의 코드베이스에 그대로 붙여 넣을 수 있고 변경 없이 동작합니다. PCRE, Python, Java에서 이식 중이라면 설명기가 각 토큰을 분해해 주어 옮겨지지 않는 구문(원자 그룹, 소유 수량자, 인라인 수정자)을 찾아낼 수 있습니다.
원시 일치 외에 테스터가 표면화하는 것: 일치 결과 & 캡처 그룹 패널은 모든 일치를 [start, end) 오프셋과 함께 나열하고 각 캡처 그룹의 값을 보여 줍니다. /d 플래그를 사용한 String.prototype.matchAll에서 얻을 수 있는 것과 동일한 정보지만, 시각적으로 훑어보기 쉽게 배치되어 있습니다. 치환 탭은 $1 / $& / $` / $' / $$ / $<name> 템플릿 알파벳 전체를 지원하는 실시간 치환 미리보기를 보여 줍니다. 정확히 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) 오프셋, 전체 일치 텍스트, 그리고 그 안의 모든 위치 기반 + 이름 있는 캡처 그룹을 보여 줍니다. 이름 있는 그룹은 $<name>으로 스스로 라벨링하므로, 코드에서 소비할 방식 그대로 데이터를 읽을 수 있습니다.
$1 / $& / $<name>을 지원하는 실시간 치환 미리보기
치환 탭으로 전환해 치환을 실시간으로 적용된 모습을 보십시오. 전체 ECMAScript 치환 알파벳이 동작합니다. 위치 기반의 $1..$N, 이름 기반의 $<name>, 전체 일치의 $&, 접두/접미의 $`와 $', 리터럴 달러의 $$. 입력과 출력 패널이 나란히 배치되어 한 번의 클릭으로 복사할 수 있습니다.
정규식 경계로 분할
분할 탭은 사용자의 정규식으로 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 이름 있는 그룹은 우측 패널에 $<year>, $<month>, $<day>로 표시됩니다. 치환 탭으로 전환해 $<day>/$<month>/$<year>를 시도하면 ISO 날짜를 DMY 형식으로 한 번에 다시 포맷할 수 있습니다. 같은 기법은 모든 최신 JS replace 호출에서 동일하게 동작합니다.
$1 역참조로 찾아 치환
(\w+) (\w+)
치환 템플릿: $2, $1 → Jack Doe → Doe, Jack
이름 없는 캡처 그룹 두 개, 치환 템플릿 $2, $1, 그리고 치환 탭은 실시간 미리보기를 보여 줍니다. $&, $`, $', $$, $<name>이 모두 지원됩니다. 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
슬래시 사이에 패턴을 입력하십시오
ECMA-262 정규 표현식을 /…/ 입력란에 넣으십시오. 잘못된 패턴은 파서 메시지와 함께 빨간색으로 강조됩니다. 유효한 패턴은 실시간 일치로 이어집니다.
- 2
필요한 플래그를 토글하십시오
g (전역), i (대소문자 무시), m (다중 행), s (dotAll), u (유니코드), y (sticky), d (인덱스). 각 칩은 켜져 있을 때 빛납니다. 패턴 우측의 표시 영역에 정규 형식의 리터럴이 보입니다.
- 3
테스트 텍스트를 붙여넣으십시오
입력하는 동안 일치가 교차 색상으로 강조됩니다. 우측의 일치 결과 & 캡처 그룹 패널은 모든 일치를 [start, end) 오프셋과 함께 나열하고 각 캡처 그룹의 값(이름 있는 그룹은 $<name>으로 라벨)을 보여 줍니다.
- 4
치환, 분할, 설명을 위해 탭을 전환하십시오
치환은 입력 옆에 치환 템플릿을 미리 봅니다. 분할은 모든 일치 경계에서 텍스트를 잘라냅니다. 설명은 패턴을 토큰 단위로 분해해 요소마다 평이한 한국어 설명을 제공합니다.
- 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'] 반환
탐욕적 수량자가 과하게 소비함
.+는 가능한 한 많이 소비하므로, <.+>를 <a> and <b>에 적용하면 <a>가 아니라 <a> and <b>를 캡처합니다. 게으른 수량자(.+?), 더 제한적인 문자 클래스([^>]+)를 사용하거나, 주변 탐색으로 고정하십시오.
패턴: /<.+>/ → '<a> and <b>'에 일치
패턴: /<[^>]+>/ → '<a>'와 '<b>'에 각각 일치
중첩 수량자로 인한 치명적 백트래킹
(a+)+b를 긴 실패 문자열에 적용하면 지수적으로 폭발합니다. 패턴 시간 초과 배너가 250ms 후에 발동합니다. 중첩을 제거하도록 다시 작성하십시오. a+b는 같은 일을 선형 시간에 수행합니다. 원자 그룹 시뮬레이션 (?=(a+))\1b도 대안입니다.
패턴: /(a+)+b/ 적용: 'aaaaaaaaaaaaaaaaaaaaac' → 타임아웃
패턴: /a+b/ 같은 입력 → 즉시 '일치 없음'
$와 ^가 Python의 \A, \Z처럼 동작하지 않음
JavaScript에서 ^와 $는 /m이 켜져 있을 때만 줄 시작 / 줄 끝을 의미합니다. 그렇지 않으면 문자열 시작 / 문자열 끝입니다. 항상 문자열 경계를 의미하는 Python의 \A와 \Z는 JS에 없습니다. 필요에 따라 /m을 토글하십시오.
패턴: /^Error/ /m 없이 다중 행 로그에 적용 → 첫 줄만 일치
패턴: /^Error/m 같은 입력 → Error로 시작하는 모든 줄에 일치
문자열에 $1을 사용했지만 replace를 함수로 호출
text.replace(re, '$1')은 역참조를 전개합니다. text.replace(re, () => '$1')은 함수가 템플릿 토큰을 보지 않으므로 리터럴 문자열 '$1'을 전달합니다. 함수 안에서는 캡처 그룹이 위치 기반 인자로 도착합니다.
text.replace(/(\w+)/, m => '$1') → 리터럴 '$1' 반환
text.replace(/(\w+)/, (_, g1) => g1.toUpperCase()) → 캡처를 사용
\w나 .이 유니코드 문자에 일치하지 않음
기본 \w는 [A-Za-z0-9_]입니다. 모든 문자 체계의 모든 글자에 일치하려면 /u를 켜고 \p{Letter} (\p{L})로 전환하십시오. 점도 기본적으로 줄 바꿈에서 멈춥니다. 진정한 임의 문자가 필요하다면 /s (dotAll)를 사용하십시오.
패턴: /\w+/ 'hello'에 일치하지만 'héllo'나 '안녕'에는 일치하지 않음
패턴: /\p{Letter}+/u 세 가지 모두에 일치 PCRE 패턴을 붙여넣었더니 SyntaxError 발생
JavaScript는 원자 그룹 (?>...), 소유 수량자 a++, 인라인 수정자 (?i), 조건부 (?(1)yes|no), 그리고 \A / \Z를 지원하지 않습니다. 파서 오류가 문제의 구성 요소를 짚어 주므로, JS에서 지원하는 동등한 표현(주변 탐색 시뮬레이션, 별도 플래그 토글, 대체)으로 다시 작성하십시오.
패턴: (?i)foo → SyntaxError: invalid group
패턴: foo에 /i 플래그를 켠 상태 → 같은 효과
이 도구를 사용하는 사람들
- 출시 전에 폼 입력 검증
- 이메일 / 전화 / 우편번호 / 사용자명 정규식이 기대한 값에 일치하고 그렇지 않은 값을 거부하는지 — 엣지 케이스(유니코드 이름, 플러스 별칭, 국제 형식)까지 — 검증이 프로덕션에 도달해 실제 사용자를 튕겨내기 전에 확인하십시오.
- 로그와 설정에서 데이터 추출
- 임의의 로그 슬라이스에서 요청 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, $&, $
, $', $$, $<name>을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를 사용하십시오. - 캡처 그룹에 이름을 붙이라
(?<year>\d{4})-(?<month>\d{2})는 자기 문서화입니다. 6개월 뒤 정규식을 다시 읽었을 때m.groups.year는 명백히 연도이지만m[1]은 그렇지 않습니다. $<name>으로 작성한 치환 템플릿은 그룹 순서 변경에서도 살아남습니다. 위치 기반 템플릿은 누군가 그룹을 하나 추가하는 순간 깨집니다.- 성공뿐 아니라 실패 사례도 테스트하라
- 정규식 테스터는 실패를 위한 도구입니다. 패턴이 일치하는 것을 확인한 뒤, 테스트 텍스트를 의도적으로 변형해 일치하지 않는 것이 무엇인지 보십시오. 선행 공백, 후행 공백, 누락된 부분, 추가된 부분, 잘못된 대소문자, 혼합 문자 체계입니다. 유효한 입력은 통과시키지만 쓰레기도 받아들이는 패턴이 프로덕션이 가장 먼저 노출하는 버그입니다.
자주 묻는 질문
제 정규식이나 테스트 텍스트가 서버로 전송되나요?
이 테스터는 어떤 정규식 계열을 사용하나요 — PCRE, Python, Java, JavaScript?
new RegExp(pattern, flags)로 얻는 엔진과 동일합니다. 지원 기능은 다음과 같습니다. 캡처 그룹(번호 + (?<name>...)로 이름 부여), 전방 탐색 (?=...)과 (?!...), 후방 탐색 (?<=...)과 (?<!...), 일곱 가지 플래그 g/i/m/s/u/y/d, /u 아래의 유니코드 속성 이스케이프(\p{Letter}), 역참조 \1..\9. PCRE 전용 기능인 원자 그룹 (?>...), 소유 수량자 a++, 조건부 (?(1)yes|no), 인라인 수정자 (?i)는 구문 오류를 반환합니다. Python의 re.VERBOSE는 본 도구에서 지원되지 않습니다. Python/Java/Go 정규식의 경우 네이티브 엔진으로 패턴을 다시 옮기십시오. 단순한 패턴 대부분은 변경 없이 이식되며, 본 도구의 설명기는 계열 중립적입니다. g, i, m, s, u, y, d 플래그는 각각 무엇을 하나요?
.indices와 .indices.groups에 모든 캡처에 대한 [start, end] 쌍을 채워 넣습니다. 본 테스터는 그룹 경계를 그리기 위해 내부적으로 /d를 사용합니다. 테스트 텍스트 위의 칩으로 토글할 수 있고, 정규 형식의 /pattern/flags 리터럴이 표시 영역에 보입니다. 캡처 그룹을 어떻게 작성하고 어떻게 다시 참조하나요?
(\d{4})-(\d{2})-(\d{2})는 위치 기반 그룹 세 개를 제공하며, 치환에서는 $1, $2, $3로, 일치 결과 패널에서는 m.groups[0..2]로 접근합니다. 이름 있는 그룹에는 (?<name>...)을 사용하십시오. (?<year>\d{4})-(?<month>\d{2})로 두면 치환 템플릿에서 $<year>/$<month>로 쓸 수 있습니다. 수량자에서만 그룹 묶음이 필요하다면 비캡처 그룹 (?:...)을 사용하십시오((?:foo|bar)+). 역참조를 만들지 않으므로 번호 기반 $1..$N이 안정적으로 유지됩니다. 같은 패턴 안에서는 \1, \2 등으로 이전 캡처를 다시 참조할 수 있습니다. \b(\w+)\s+\1\b처럼 중복 단어를 찾는 데 유용합니다. 전방·후방 탐색은 어떻게 동작하고, 어디에 좋은가요?
(?=foo) (긍정 전방 탐색)은 현재 위치 뒤에 foo가 따라오면 성공합니다. (?!foo) (부정 전방 탐색)은 foo가 따라오지 않을 때 성공합니다. (?<=foo)와 (?<!foo)은 후방 탐색의 대응 표현입니다. 실제 용도는 다음과 같습니다. 주변을 포함하지 않고 부분 문자열만 추출하기((?<=\$)\d+은 달러 기호 뒤의 숫자에 일치하지만 $는 일치 범위에 포함되지 않음), 한 패턴 안에서 여러 제약을 검증하기((?=.*[A-Z])(?=.*\d).{8,}은 대문자 하나, 숫자 하나, 8자 이상을 요구함), 발생을 금지하기(^(?!.*\bpassword\b)는 password라는 단어가 포함된 줄을 거부함). 최신 ECMA-262는 가변 길이 후방 탐색을 지원하므로 (?<=^prefix-?)도 동작합니다. 정규식이 왜 브라우저를 멈추게 하나요? 치명적 백트래킹이란 무엇인가요?
(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과 어떻게 다른가요?
. | ( ) [ ] { } * + ? ^ $ \ 같은 특수 문자를 어떻게 이스케이프하나요?
\., \|, \(, \), \[, \], \{, \}, \*, \+, \?, \^, \$, \\. 슬래시 /는 문자열로 전달되는 패턴에서는 이스케이프가 필요 없습니다(JS 정규식 리터럴의 슬래시 사이에서만 필요). 문자 클래스 [...] 안에서는 대부분의 메타 문자가 특수한 의미를 잃으므로 [.], [*], [+]는 모두 리터럴 문자에 일치합니다. 특수한 의미를 유지하는 것은 ], \, ^ (부정용으로 맨 앞에 올 때만), - (두 문자 사이의 범위)뿐입니다. 확신이 서지 않으면 리터럴 텍스트를 패턴에 붙여넣고 설명기를 실행하십시오. 모든 이스케이프 시퀀스에 대해 분해 패널에서 한 줄짜리 설명이 제공됩니다. 동료에게 링크로 정규식을 공유할 수 있나요?
#p=...&f=gim&t=...&tab=match). 링크를 여는 사람은 자신의 기기에서 로컬로 동일한 상태로 페이지를 복원합니다. 데이터가 해시 프래그먼트에 있기 때문에 go-tools.org 서버로 전송되지 않으며(브라우저는 프래그먼트를 요청에 담지 않습니다) 접근 로그에도 남지 않습니다. 링크 길이는 텍스트 크기에 따라 늘어나므로, 2KB가 넘는 샘플에서는 /pattern/flags 복사로 정규식을 가져가고 텍스트는 따로 붙여넣으십시오. 실제 텍스트를 공유하지 않는 협업 리뷰에서는 패턴과 플래그만 공유하면 수신자가 자신의 코퍼스를 붙여넣어 같은 일치 결과를 얻습니다. 유니코드, 이모지, 비라틴 문자도 지원하나요?
\p{Letter}는 모든 문자 체계의 모든 글자에 일치하고, \p{Script=Han}은 한자에 일치하며, \p{Emoji}는 이모지에, \p{Number}는 모든 숫자에 일치합니다. /u 없이 👨💻 같은 서러게이트 페어 이모지는 UTF-16 코드 단위 두 개로 인식되어 ^.$ 같은 패턴이 일치하지 않습니다. /u가 켜져 있으면 점은 각 자소 코드 포인트를 한 문자로 처리합니다. RTL 문자(아랍어, 히브리어)에서는 별도 처리 없이 패턴이 동작합니다. 방향은 렌더링 단계의 관심사이지 정규식 엔진의 관심사가 아닙니다. CJK 콘텐츠도 라틴과 동일하게 일치합니다. 정규식과 함께 사용하는 .match, .matchAll, .replace, .split의 차이는 무엇인가요?
왜 Python이나 Java 정규식이 여기서 동작하지 않나요?
(?i)와 (?x)는 JS에서 유효하지 않습니다. 대신 위의 플래그 칩을 사용하십시오. (2) Python의 \A와 \Z는 JS에서 ^와 $입니다(줄 단위 고정에는 /m). (3) Java/Python의 조건부 (?(name)yes|no)는 JS에서 지원되지 않습니다. 대체로 다시 작성하십시오. (4) 소유 수량자 a++와 원자 그룹 (?>...)은 JS에서 사용할 수 없습니다. (?=(a+))\1로 시뮬레이션하십시오. (5) Python의 (?P<name>...)은 JS에서 (?<name>...)입니다. (6) 수평 공백 \h와 수직 공백 \v는 JS에 없습니다. [ \t]와 [\n\r]을 사용하십시오. 이식 가능한 이식을 위해서는 설명기가 각 토큰의 역할을 분해해 보여 주므로, 지원되지 않는 구문을 동등한 표현으로 바꿀 수 있습니다. 텍스트 크기나 일치 개수의 최댓값이 있나요?
grep -oE나 rg (ripgrep)로 정규식을 실행하십시오. 스트리밍 처리되어 UI 렌더링 상한에 걸리지 않습니다. 방대한 텍스트의 일회성 스캔이라면 본 테스터에 대표 슬라이스를 붙여넣어 패턴을 검증한 뒤, 검증된 패턴을 셸에서 전체 파일에 적용하십시오. 관련 도구
모든 도구 보기 →대소문자 변환기 — UPPERCASE, lowercase, camelCase
텍스트 도구
UPPERCASE, lowercase, camelCase, snake_case, kebab-case 등 15가지 형식으로 텍스트를 즉시 변환합니다. 무료 온라인 도구, 가입 불필요, 브라우저에서 동작.
Lorem Ipsum 생성기 — 무료 자리 표시자 텍스트 도구
텍스트 도구
무료 온라인 Lorem Ipsum 생성기. 자리 표시자·더미 텍스트를 브라우저에서 즉시 생성해 일반 텍스트, HTML, Markdown, JSON으로 복사·다운로드하세요. 가입 불필요.
텍스트에서 중복 줄 제거
텍스트 도구
텍스트에서 중복 줄을 제거하는 무료 온라인 도구. 대소문자·공백 무시, 첫/마지막 항목 유지, 제거된 중복 수 표시. 100% 브라우저 실행. 가입 불필요.
URL 슬러그 생성기 — 어떤 텍스트든 슬러그로
텍스트 도구
어떤 제목이든 SEO 친화적인 깔끔한 URL 슬러그로 즉시 변환합니다. 악센트와 키릴 문자를 음역하거나 유니코드 글자를 유지하세요. 100% 비공개, 브라우저에서 동작.
텍스트 줄 정렬 — 알파벳순 & 자연 정렬
텍스트 도구
텍스트 줄을 알파벳순·자연 정렬(숫자 인식)·길이순으로 정렬하는 무료 온라인 도구. 100% 브라우저 실행, 중복 제거·역순·정리 지원. 가입 불필요.
텍스트 비교 및 차이 분석
텍스트 도구
두 텍스트를 브라우저에서 즉시 비교. 좌우 대조 뷰, 인라인 단어 단위 하이라이트, 통합 diff 출력, 대소문자/공백/빈 줄 무시. 100% 브라우저 처리, 업로드 없음.