JavaScript 정규식 테스터

정규식을 입력하면 모든 일치 항목이 실시간으로 강조 표시됩니다. 캡처 그룹, 치환 미리보기, 바로 쓸 수 있는 패턴 라이브러리도 함께 제공합니다.

브라우저에서 실행가입 불필요업로드 없음

일치 항목 강조 표시

    
$1, $<name>, $&(전체 일치) 사용 가능
일치 상세
#위치일치그룹
정규식 치트 시트
.줄바꿈을 제외한 모든 문자(s 사용 시 모든 문자)
\d \w \s숫자, 단어 문자, 공백
\D \W \S숫자 아님, 단어 문자 아님, 공백 아님
[abc] [^abc]a, b, c 중 하나 / 모두 아님
[a-z0-9]문자 범위
\p{L} \p{N}유니코드 문자 / 숫자(u 필요)
^ $입력의 시작 / 끝(m 사용 시 줄의 시작 / 끝)
\b \B단어 경계 / 경계 아님
* + ?0회 이상, 1회 이상, 0 또는 1회
{n} {n,} {n,m}정확히 n회, n회 이상, n~m회
*? +? ??게으른 매칭(가능한 한 적게)
a|ba 또는 b
(…)캡처 그룹($1로 참조)
(?<name>…)이름 있는 그룹, $<name>
(?:…)비캡처 그룹
\1 \k<name>역참조
(?=…) (?!…)전방 탐색 / 부정 전방 탐색
(?<=…) (?<!…)후방 탐색 / 부정 후방 탐색
\. \* \\이스케이프된 리터럴 문자
\n \t \r줄바꿈, 탭, 캐리지 리턴
\uFFFF유니코드 코드 단위
\u{1F600}코드 포인트(u 필요)
$&치환 문자열 안의 전체 일치
$` $'일치 앞 / 뒤의 텍스트

정규식 테스터 사용 방법

  1. 슬래시 사이에 패턴을 입력합니다. 앞뒤의 /는 빼고 입력하세요.
  2. g(모든 일치), i(대소문자 무시), m(여러 줄) 같은 플래그를 켜고 끕니다.
  3. 테스트할 텍스트를 붙여넣습니다. 일치 항목은 오른쪽에 강조 표시되고, 아래에 위치와 캡처 그룹이 목록으로 표시됩니다.
  4. 치환을 체크하고 $1이나 $<name> 같은 치환 문자열을 입력하면 String.replace 결과를 미리 볼 수 있습니다.
  5. 패턴 라이브러리에서 검증된 이메일, URL, IP, 날짜 정규식을 골라 시작할 수 있습니다.

JavaScript 정규표현식

이 테스터는 브라우저 자체의 RegExp 엔진을 사용하므로, 결과는 JavaScript와 Node.js에서 String.match, matchAll, replace, RegExp.exec가 반환하는 값과 정확히 같습니다. 이름 있는 그룹 (?<name>…), 후방 탐색 (?<=…), u 플래그와 함께 쓰는 \p{L} 같은 유니코드 속성 이스케이프, d 플래그의 일치 인덱스 등 최신 문법도 포함됩니다.

플래그의 역할

플래그이름효과
gglobal첫 번째 일치에서 멈추지 않고 모든 일치를 찾습니다.
iignoreCase대소문자와 관계없이 문자가 일치합니다.
mmultiline^와 $가 각 줄의 시작과 끝에서 일치합니다.
sdotAll.이 줄바꿈과도 일치합니다.
uunicode패턴을 코드 포인트 단위로 처리하고 \p{…}와 \u{…}를 사용할 수 있게 합니다.
ysticky현재 lastIndex 위치에서만 일치합니다.
dhasIndices각 캡처 그룹의 시작과 끝 위치를 알려 줍니다.

치명적 백트래킹 방지

(a+)+$나 (\w|\d)*x처럼 수량자가 중첩된 패턴은 거의 일치하는 입력에서 지수 시간이 걸릴 수 있습니다. 일반 웹 페이지라면 탭이 멈춰 버리죠. 여기서는 모든 매칭이 백그라운드 Web Worker에서 실행되고 1초 후 중단되므로, 브라우저가 멈추는 대신 명확한 경고를 받습니다. 같은 패턴이 운영 코드에 있으면 ReDoS 취약점이 될 수 있으니 경고를 고쳐야 할 버그로 다루세요.

더 좋은 정규식을 쓰는 팁

  • 값 전체를 검증할 때는 ^와 $로 패턴을 고정하세요. 그렇지 않으면 문자열 어디에서든 일치하면 통과합니다.
  • .*보다 [^"]* 같은 구체적인 클래스를 쓰세요. 더 빠르고 과도한 일치를 막습니다.
  • 캡처한 값이 필요 없다면 비캡처 그룹 (?:…)을 사용하세요.
  • 그룹에 이름을 붙이세요. match.groups.year가 match[1]보다 읽기 쉽습니다.

자주 묻는 질문

이 테스터는 어떤 정규식 문법을 사용하나요?
브라우저에 내장된 RegExp를 통한 JavaScript(ECMAScript) 문법입니다. 대부분의 문법은 PCRE, Python, Java와 같지만, 소유 수량자, 원자 그룹, (?i) 같은 인라인 수정자는 JavaScript에서 사용할 수 없습니다.
패턴이 일치 항목을 하나만 찾는 이유는 무엇인가요?
g(global) 플래그가 없으면 JavaScript는 첫 번째 일치에서 멈춥니다. 모든 일치를 찾으려면 g를 켜세요.
치환 문자열에서 그룹을 어떻게 참조하나요?
번호 그룹은 $1, $2…, 이름 있는 그룹은 $<name>, 전체 일치는 $&, 달러 기호 자체는 $$를 사용하세요.
테스터가 시간 초과로 멈춘 이유는 무엇인가요?
입력에서 패턴 실행이 1초를 넘었다는 뜻이며, 거의 항상 치명적 백트래킹이 원인입니다. (x+)+ 같은 중첩 수량자나 (a|a)* 같은 겹치는 대안을 찾아 각 문자가 한 가지 방식으로만 일치하도록 다시 작성하세요.
테스트 데이터가 어딘가로 전송되나요?
아니요. 매칭은 브라우저 안의 Web Worker에서 로컬로 실행됩니다. 패턴과 텍스트는 다시 방문했을 때 남아 있도록 내 브라우저에만 저장됩니다.

관련 도구