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|b | a 또는 b |
| (…) | 캡처 그룹($1로 참조) |
| (?<name>…) | 이름 있는 그룹, $<name> |
| (?:…) | 비캡처 그룹 |
| \1 \k<name> | 역참조 |
| (?=…) (?!…) | 전방 탐색 / 부정 전방 탐색 |
| (?<=…) (?<!…) | 후방 탐색 / 부정 후방 탐색 |
| \. \* \\ | 이스케이프된 리터럴 문자 |
| \n \t \r | 줄바꿈, 탭, 캐리지 리턴 |
| \uFFFF | 유니코드 코드 단위 |
| \u{1F600} | 코드 포인트(u 필요) |
| $& | 치환 문자열 안의 전체 일치 |
| $` $' | 일치 앞 / 뒤의 텍스트 |
정규식 테스터 사용 방법
- 슬래시 사이에 패턴을 입력합니다. 앞뒤의
/는 빼고 입력하세요. g(모든 일치),i(대소문자 무시),m(여러 줄) 같은 플래그를 켜고 끕니다.- 테스트할 텍스트를 붙여넣습니다. 일치 항목은 오른쪽에 강조 표시되고, 아래에 위치와 캡처 그룹이 목록으로 표시됩니다.
- 치환을 체크하고
$1이나$<name>같은 치환 문자열을 입력하면String.replace결과를 미리 볼 수 있습니다. - 패턴 라이브러리에서 검증된 이메일, URL, IP, 날짜 정규식을 골라 시작할 수 있습니다.
JavaScript 정규표현식
이 테스터는 브라우저 자체의 RegExp 엔진을 사용하므로, 결과는 JavaScript와 Node.js에서 String.match, matchAll, replace, RegExp.exec가 반환하는 값과 정확히 같습니다. 이름 있는 그룹 (?<name>…), 후방 탐색 (?<=…), u 플래그와 함께 쓰는 \p{L} 같은 유니코드 속성 이스케이프, d 플래그의 일치 인덱스 등 최신 문법도 포함됩니다.
플래그의 역할
| 플래그 | 이름 | 효과 |
|---|---|---|
g | global | 첫 번째 일치에서 멈추지 않고 모든 일치를 찾습니다. |
i | ignoreCase | 대소문자와 관계없이 문자가 일치합니다. |
m | multiline | ^와 $가 각 줄의 시작과 끝에서 일치합니다. |
s | dotAll | .이 줄바꿈과도 일치합니다. |
u | unicode | 패턴을 코드 포인트 단위로 처리하고 \p{…}와 \u{…}를 사용할 수 있게 합니다. |
y | sticky | 현재 lastIndex 위치에서만 일치합니다. |
d | hasIndices | 각 캡처 그룹의 시작과 끝 위치를 알려 줍니다. |
치명적 백트래킹 방지
(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에서 로컬로 실행됩니다. 패턴과 텍스트는 다시 방문했을 때 남아 있도록 내 브라우저에만 저장됩니다.