온라인 정규식 테스터 — JavaScript 정규 표현식 실시간 테스트
실시간 매치 강조, 캡처 그룹, 치환 미리보기로 정규 표현식을 샘플 텍스트에 테스트하세요. 무료, 브라우저에서 실행.
Contact us at hello@freetoolsforweb.com or sales@example.org. Site: https://freetoolsforweb.com/tools — call (416) 555-0199. Launched 2026-09-08, colours #244b3f and #fff, server 10.0.0.12.
| # | 일치 | 인덱스 | 그룹 |
|---|---|---|---|
| 1 | hello@freetoolsforweb.com | 14 | — |
| 2 | sales@example.org | 43 | — |
공유 링크를 열면 같은 패턴, 플래그, 테스트 텍스트, 바꿀 내용으로 이 테스터가 열립니다. 이 값들은 링크의 # 뒤에 저장되며, 브라우저는 이 부분을 서버로 보내지 않습니다.
모든 작업이 브라우저에서 실행됩니다. 입력한 내용은 전송되거나 저장되지 않습니다. 모든 무료 도구 보기.
문제를 발견하셨거나 개선할 점이 있나요? 모든 메시지를 읽고 빠르게 고칩니다.
이 무료 정규식 테스터는 JavaScript 정규 표현식을 브라우저에서 샘플 텍스트에 실행하고, 입력하는 대로 모든 매치를 강조 표시합니다. 매치마다 캡처 그룹, 이름 있는 그룹, 매치 위치가 나열되고, 치환 모드에서는 $1과 $<name> 치환을 String.replace와 똑같이 미리 보여 줍니다. 공유 링크를 복사하면 링크를 연 사람은 같은 패턴, 플래그, 테스트 텍스트를 보게 되며, 정규식 치트 시트의 모든 예제도 같은 방식으로 여기서 열립니다.
엔진은 브라우저 자체의 엔진이므로 결과는 Node.js, React, Deno 및 모든 웹 프레임워크와 정확히 일치합니다. PCRE(PHP, Python의 re, grep -P)와는 비슷하지만 똑같지는 않습니다. 가장 중요한 차이점인 lookbehind 지원, 소유 수량자, \A 앵커는 아래에 정리했으니, 여기서 동작한 패턴이 다른 곳에서 예상 밖으로 동작하는 일은 없을 것입니다.
사용 방법
- 앞뒤 슬래시 없이 패턴을 입력하거나, 검증된 패턴으로 시작하려면 프리셋(이메일, URL, 전화번호, 날짜, IPv4, 16진수 색상)을 클릭하세요.
- 필요한 플래그를 체크하세요. g는 첫 매치만이 아니라 모든 매치를 찾고, i는 대소문자를 무시하며, m은 ^와 $가 각 줄의 시작과 끝에 매치되게 합니다.
- 테스트 텍스트를 붙여 넣으세요. 매치가 즉시 강조되고 표에 각 매치와 캡처 그룹이 나열됩니다.
- 바꾸기를 열어 치환 결과를 미리 보세요. 번호 그룹은 $1, 이름 있는 그룹은 $<name>, 전체 매치는 $&를 씁니다.
- JavaScript 리터럴용으로는 /pattern/flags 형식으로, 패턴이 문자열에서 온다면 new RegExp() 형식으로 복사하세요.
- 공유 링크 복사를 클릭해 전체 설정을 동료에게 보내세요. 상태는 링크의 # 뒤에 있으므로 링크를 열 때 어떤 서버로도 전송되지 않습니다.
자주 묻는 질문
어떤 정규식 문법을 쓰나요?
브라우저가 패턴을 직접 평가하므로 ECMAScript(JavaScript)입니다. Node.js, 프런트엔드 코드, JSON 스키마 패턴이 쓰는 문법이죠. Python, Java, Go, PHP, grep은 각자의 엔진을 쓰며, 기본은 같지만 세부에서 다릅니다. 특이한 패턴은 배포하기 전에 대상 언어에서 테스트하세요.
패턴이 왜 첫 번째 매치만 찾나요?
g(global) 플래그가 꺼져 있기 때문입니다. 이 플래그가 없으면 JavaScript는 첫 매치에서 멈추는데, 유효성 검사에는 맞지만 추출에는 맞지 않습니다. 모든 매치를 나열하려면 g를 켜세요.
여러 줄에 걸쳐 매치하려면 어떻게 하나요?
서로 다른 두 플래그가 서로 다른 일을 합니다. m(multiline)은 ^와 $가 각 줄의 시작과 끝에 매치되게 합니다. s(dotAll)는 .이 줄바꿈 문자에도 매치되게 합니다. s 없이 ‘줄바꿈을 포함한 모든 것’을 나타내는 관용구는 [\s\S]*입니다.
이름 있는 캡처 그룹이란 무엇인가요?
(?<year>\d{4})는 숫자 네 개를 year라는 이름으로 캡처하므로, 괄호를 셀 필요 없이 match.groups.year로 읽고 치환에서는 $<year>로 참조할 수 있습니다. 이름 있는 그룹은 긴 패턴을 읽기 쉽게 만들고, 다른 그룹을 추가하거나 지워도 깨지지 않습니다.
정규식이 느리거나 위험할 수 있나요?
네. (a+)+처럼 중첩된 수량자나 겹치는 선택지가 있는 패턴은 일부 입력에서 지수 시간이 걸릴 수 있습니다(치명적 백트래킹, 실제 서비스 거부 공격 경로). 패턴 때문에 이 페이지가 멈춘다면 서버도 똑같이 멈출 것입니다. .* 대신 구체적인 문자 클래스를 쓰고 수량자 중첩을 피하세요.
이메일 주소를 정규식으로 검증해야 하나요?
느슨하게만 하세요. 여기 있는 프리셋은 일반적인 형태와 맞는지 보고 명백한 오타를 걸러 내는데, 양식에서는 그 정도면 충분합니다. RFC 5322를 완벽히 따르는 패턴은 수천 자에 이르면서도 메일함이 실제로 있는지는 알려 주지 못합니다. 형태를 확인한 다음 확인 메일을 보내세요.
간단한 정규식 치트 시트
• . 줄바꿈을 제외한 모든 문자 · \d 숫자 · \w 단어 문자 · \s 공백 문자 · \b 단어 경계
• * 0개 이상 · + 1개 이상 · ? 선택적 · {n,m} n회 이상 m회 이하 · 이들 뒤에 ?를 붙이면 게으른(lazy) 수량자
• [abc] 이 중 하나 · [^abc] 이 중 어느 것도 아님 · [a-z] 범위 · (x|y) 선택 · (?:x) 비캡처 그룹
• ^ 시작 · $ 끝 · (?=x) 전방 탐색 · (?!x) 부정 전방 탐색 · (?<=x) 후방 탐색(JavaScript와 PCRE, 모든 엔진은 아님)
• 특수 문자는 백슬래시로 이스케이프: \. \? \( \[ \\
JavaScript vs PCRE: 실제로 부딪히게 될 차이점
JavaScript에는 소유 수량자(a++), 원자 그룹, \A나 \Z 앵커(m 플래그 없이 ^와 $를 쓰세요)가 없고, 인라인 수정자는 ES2025에서 도입된 범위 지정 형태 (?i:...)만 지원합니다. 패턴 맨 앞의 범위 없는 (?i)는 문법 오류입니다. lookbehind, 이름 있는 그룹, u 플래그를 켰을 때의 \p{L} 같은 유니코드 속성 이스케이프는 지원합니다. Python의 re는 regex 패키지 없이는 \p{...}도 지원하지 않고, Go의 RE2는 전후방 탐색이 아예 없습니다. 여러 언어에서 돌아가야 하는 패턴이라면 문자 클래스, 단순 그룹, 앵커, 탐욕적 또는 게으른 수량자로 이루어진 공통 범위 안에 머무르세요.
관련 무료 도구
- 정규식 치트 시트 — 모든 정규 표현식 토큰을 실제로 작동하는 예제와 함께, JavaScript, PCRE/PHP, Python, Go, Java, .NET 지원 여부까지 정리했습니다. 사용해 보기 링크를 누르면 정규식 테스터가 미리 채워진 상태로 열립니다.
- JSON 포매터 — JSON을 보기 좋게 정렬하고, 압축하고, 검증하세요. 파싱 오류는 줄과 열 위치까지 알려 줍니다. 브라우저에서 실행, 업로드 없음.
- Base64 인코더 / 디코더 — 텍스트나 파일을 Base64로 인코딩하고, 이미지를 CSS·<img> 코드와 함께 data URI로 바꾸고, Base64를 미리보기 가능한 파일로 디코딩하세요. 어떤 데이터도 브라우저 밖으로 나가지 않습니다.
- 단어·글자 수 세기 — 입력하는 대로 단어, 글자, 문장 수와 읽는 시간을 세고, X, LinkedIn, Instagram, YouTube, SEO, SMS 제한도 확인하세요.