이 정규식 테스터는 브라우저가 JavaScript에서 쓰는 것과 같은 RegExp 엔진으로 패턴을 실행합니다. 그래서 여기서 동작한 패턴은 브라우저와 Node.js의 match, matchAll, replace, exec에서도 똑같이 동작합니다. 일부러 JavaScript 전용으로 만들었습니다. ECMAScript 정규식은 PCRE, Python, Java, .NET과 lookbehind 지원, 이름 있는 그룹 문법, 플래그, \w와 .가 매치하는 범위에서 차이가 있고, "테스터에서는 되는데 코드에서는 안 된다"는 문제의 대부분이 다른 계열로 검증한 데서 나옵니다.
패턴을 입력하고, 코드에서 쓸 플래그를 켜고, 테스트할 텍스트를 입력합니다. 입력하는 즉시 텍스트에 매치가 강조되고 캡처 그룹마다 다른 색이 붙으며, 표에는 매치를 순서대로 문자 범위와 각 그룹 값(이름 있는 그룹은 이름으로)과 함께 최대 1,000개까지 나열합니다. 치환 입력란에 $1, $<name>, $&를 쓰면 결과를 미리 볼 수 있습니다. 패턴은 4 KiB, 치환 문자열은 1 KiB, 테스트 텍스트는 64 KiB까지 입력할 수 있어서 로그 줄, URL, 폼 검증 규칙, 설정 조각을 다루기에 충분합니다.
매칭은 페이지 안의 Web Worker에서 실행되고 1.5초가 지나면 중단되므로 치명적인 백트래킹이 일어나는 패턴이 탭을 멈추게 하지 못합니다. 서버로는 아무것도 전송되지 않고 패턴과 텍스트는 브라우저 안에만 있습니다.
사용 방법
슬래시 없이 패턴만 입력
/(\d{4})-(\d{2})-(\d{2})/g가 아니라(\d{4})-(\d{2})-(\d{2})처럼 식의 본문만 입력합니다. 슬래시는 소스 코드의 리터럴 문법일 뿐 패턴에 속하지 않습니다. 이메일, ISO 날짜, URL, IPv4, HEX 색상, 공백 제거 같은 자주 쓰는 패턴에서 시작해도 됩니다.코드에서 쓰는 플래그 지정
g, i, m, s, u, v, y, d 플래그 버튼을 켜고 끕니다. 기본값은
g입니다.u와v는 함께 쓸 수 없어 하나를 켜면 다른 하나가 꺼집니다. 패턴을 실행할 코드와 같은 플래그를 쓰고, 버튼 위에 마우스를 올리면 설명이 나옵니다.테스트 텍스트 붙여 넣기
빈 줄, 유니코드 문자, 끝 공백, 매치되면 안 되는 입력처럼 까다로운 경우까지 포함한 대표 입력을 붙여 넣습니다. 매치는 즉시 강조되며 실행 버튼은 없습니다.
실행하고 매치 목록 읽기
표의 각 행에 매치 번호, 텍스트 안에서 0부터 세는 문자 범위, 매치된 문자열이 나오고 옆에 그룹의 색과 이름과 함께 캡처 그룹이 나옵니다. 매치에 참여하지 않은 그룹은 참여하지 않았다고 표시됩니다.
오류 고치고 결과 복사
잘못된 패턴은 입력창 아래에 엔진이 알려 주는 메시지 그대로 표시됩니다.
$<year>/$<month>같은 치환 문자열을 입력해 결과를 미리 보고, 원하는 대로 동작하면 복사하세요.
작동 원리
ECMAScript 플래그
정규식 문법은 ECMA-262(ECMAScript 언어 명세)에 정의되어 있습니다. 플래그는 패턴 전체의 매칭 방식을 바꾸는 한 글자이며, 알 수 없는 글자나 중복(gg)은 엔진이 문법 오류로 거부합니다. 이 도구는 켜 둔 플래그를 new RegExp(pattern, flags)에 그대로 넘기므로 매치 결과는 코드에서 실행할 때와 똑같습니다.
이 페이지는 v(unicodeSets)를 포함한 현재의 플래그 여덟 가지를 제공합니다. u와 v는 함께 쓸 수 없으며, v는 --, && 같은 집합 연산과 \p{RGI_Emoji} 같은 문자열 속성을 추가합니다.
| 플래그 | 이름 | 효과 |
|---|---|---|
| g | global | 첫 매치에서 멈추지 않고 모두 찾음. g가 없으면 매치를 하나만 나열함 |
| i | ignoreCase | 대소문자를 구분하지 않음 |
| m | multiline | ^와 $가 텍스트 전체의 처음과 끝이 아니라 모든 줄바꿈에서 매치됨 |
| s | dotAll | .가 \n 같은 줄 종결 문자도 매치함 |
| u | unicode | 패턴과 텍스트를 코드 포인트 단위로 처리. \p{...} 속성 이스케이프와 엄격한 문법 사용 가능 |
| v | unicodeSets | --, && 같은 집합 연산과 \p{RGI_Emoji} 같은 문자열 속성을 쓰는 유니코드 모드. u와 함께 사용할 수 없음 |
| y | sticky | lastIndex 위치에서만 매치. 이 도구는 g처럼 이전 매치 뒤에서 이어서 찾음 |
| d | hasIndices | 엔진이 그룹의 시작과 끝 인덱스를 기록함. 페이지가 그룹 색을 칠하려고 항상 내부에서 요청하므로 d를 켜고 꺼도 보이는 결과는 같음 |
캡처 그룹, 이름 있는 그룹, lookbehind
괄호는 여는 괄호의 위치 순서대로 번호가 매겨지는 캡처 그룹을 만듭니다. (?:...)는 캡처하지 않는 그룹입니다. (?<name>...)은 이름 있는 그룹으로 JavaScript에서 match.groups.name으로 읽습니다. 이 페이지는 그룹의 색과 값 옆에 이름을 표시하고, 치환 문자열에서 $<name>으로 쓸 수 있게 합니다. 전방탐색 (?=...), (?!...)와 후방탐색 (?<=...), (?<!...)은 최신 엔진에서 모두 지원되며 텍스트를 소비하지 않고 매치됩니다.
(?i)처럼 범위를 지정하지 않은 인라인 플래그는 문법 오류지만, 최신 JavaScript는 i, m, s를 범위 안에 적용하는 (?i:...) 같은 modifier를 지원합니다. a++ 같은 소유 한정자와 원자 그룹은 여전히 문법 오류이므로 PCRE나 Java에서 복사한 패턴은 다시 확인해야 합니다.
탐욕적·게으른 한정자와 빈 매치
한정자는 기본이 탐욕적(greedy)입니다. <a><b>에 <.+>를 쓰면 .+가 가능한 만큼 가져가서 문자열 전체가 매치됩니다. ?를 붙이면 게으른(lazy) 한정자가 되어 <.+?>는 첫 >에서 멈추고 <a>와 <b>를 따로 찾습니다.
a*처럼 빈 문자열과도 매치되는 패턴은 빈 매치를 만듭니다. 전역 모드에서 이 도구는 빈 매치 뒤에 한 글자 앞으로 이동해 무한 루프를 막으며, matchAll과 replace도 같은 규칙을 씁니다.
a* on baac -> "" @0, "aa" @1, "" @3, "" @4
<.+> on <a><b> -> <a><b>
<.+?> on <a><b> -> <a> <b>실제 예시
정규식: (?<user>[A-Za-z]+)@([A-Za-z0-9-]+(?:\.[A-Za-z0-9-]+)+)
플래그: g
테스트 텍스트: Contact alice@example.com or BOB@example.org.1. 8-25 "alice@example.com" user = "alice", $2 = "example.com"
2. 29-44 "BOB@example.org" user = "BOB", $2 = "example.org"
치환 문자열 $<user> at $2 -> Contact alice at example.com or BOB at example.org.엔진의 exec 반복과 replace로 직접 검증한 결과입니다. 설명용 패턴이며 완전한 이메일 검증기는 아닙니다.
정규식: \d+
플래그: (비움)
테스트 텍스트: a1 b22 c3331. [1] "1"플래그 g를 주면 같은 패턴이 1번 위치의 "1", 4번 위치의 "22", 8번 위치의 "333"을 반환합니다.
정규식: ^\w+
테스트 텍스트: one two⏎three four
플래그 g: one
플래그 gm: one, threeg -> "one" at 0
gm -> "one" at 0, "three" at 8⏎는 텍스트 안의 줄바꿈을 뜻합니다. m이 없으면 ^는 텍스트 전체의 시작에서만 매치됩니다.
정규식: <.+?>
플래그: g
테스트 텍스트: <a><b>1. [0] "<a>"
2. [3] "<b>"패턴을 <.+>로 바꾸면 인덱스 0의 "<a><b>" 하나만 매치됩니다.
정규식: .
테스트 텍스트: a😀
플래그 g: 3개 매치 (이모지가 서로게이트 두 조각으로 나뉨)
플래그 gu: 2개 매치 (a, 😀)gu -> "a" at 0, "😀" at 1또한 "Ärger über Éclair"에 \p{Lu}를 플래그 gu로 쓰면 0번 위치의 "Ä"와 11번 위치의 "É"가 매치됩니다.
자주 하는 실수
다른 계열의 정규식으로 테스트
PCRE나 Python 도구에서 테스트한 패턴에는 범위 없는
(?i), 소유 한정자, 원자 그룹,\A/\Z가 들어 있을 수 있습니다. JavaScript는(?i:...)같은 범위 지정 modifier는 지원하지만 나머지 형태는 지원하지 않습니다. 패턴을 실행할 언어와 같은 계열로 테스트하세요.g 플래그를 빼먹고 다른 매치가 없다고 오해
g가 없으면 한 번의 호출은 첫 매치만 반환합니다. 코드에서match로 모든 결과 배열을 기대한다면g가 필요하거나matchAll을 써야 합니다.m 없이 여러 줄 입력에 ^와 $ 사용
기본적으로
^와$는 문자열 전체의 처음과 끝에 붙습니다. 붙여 넣은 로그를 줄마다 검사하려면m을,.로 줄바꿈까지 매치하려면s를 추가하세요.치명적 백트래킹
(a+)+$같은 중첩 한정자는 거의 매치되는 입력에서 지수 시간이 걸릴 수 있습니다. 이 페이지는 1.5초 뒤에 중단하고 매치가 너무 오래 걸렸다고 알려 주지만, 운영 서버는 계속 바빠집니다. 배포 전에 패턴을 단순하게 고치세요.백슬래시를 두 번 이스케이프
정규식 리터럴에서는
\d로 쓰고,new RegExp("...")에 넘기는 문자열에서는\\d로 써야 합니다. 이 테스터는 패턴 자체를 입력받으므로 여기서는\d로 쓰고, 문자열에 붙여 넣을 때 백슬래시를 두 배로 늘리세요.점(.)이 모든 문자와 매치되지는 않음
s플래그가 없으면.는 줄 종결 문자를 건너뛰고,u가 없으면 이모지를 두 글자로 취급합니다. 줄바꿈까지 포함한 모든 문자는[\s\S]나s플래그로, BMP 밖의 텍스트는u로 처리하세요.
자주 묻는 질문
이 정규식 테스터는 어떤 계열의 정규식을 쓰나요?
브라우저의 기본 RegExp 객체를 통해 JavaScript(ECMAScript, ECMA-262) 정규식을 씁니다. PCRE, Python, Java용 패턴은 실패하거나 다르게 동작할 수 있습니다.
어떤 플래그를 지원하나요?
d, g, i, m, s, u, v, y 여덟 가지를 토글 버튼으로 제공합니다. u와 v는 함께 쓸 수 없어 하나를 켜면 다른 하나가 꺼집니다.
패턴 앞뒤에 슬래시를 붙여야 하나요?
아니요. 패턴 본문만 입력하고 플래그는 플래그 입력란에 적습니다. 슬래시는 JavaScript 소스 코드에서 쓰는 리터럴 구분자일 뿐입니다.
왜 패턴이 유효하지 않다고 나오나요?
엔진이 패턴이나 플래그를 거부한 것입니다. 닫히지 않은 괄호, 앞에 대상이 없는 한정자(+a), 알 수 없는 플래그, 범위 없는 (?i), 같은 실행 경로에서 중복되는 이름 그룹이 흔한 원인입니다. 서로 다른 대안 분기에 있어 둘 중 하나만 참여하는 같은 이름 그룹은 허용됩니다.
매치 수, 패턴, 텍스트 크기 제한은 얼마인가요?
매치는 최대 1,000개까지 나열하고, 패턴은 4 KiB, 테스트 텍스트는 64 KiB까지 입력할 수 있습니다. 치환 문자열은 1 KiB까지입니다. 매칭은 1.5초 뒤에 취소됩니다.
찾아 바꾸기도 할 수 있나요?
네, 미리보기로 할 수 있습니다. $1, $<name>, $&, $' 또는 달러 기호 뒤에 백틱을 붙인 패턴(매치 앞 텍스트)을 쓴 치환 문자열을 입력하면 코드에서 쓰는 것과 같은 String.prototype.replace로 계산한 결과가 매치 표 옆에 나타납니다. g 플래그가 있으면 모든 매치를, 없으면 첫 매치만 바꿉니다.
입력한 텍스트가 어딘가에 업로드되나요?
아니요. 매칭은 브라우저의 Web Worker에서 실행되며 패턴과 테스트 텍스트는 서버로 전송되지 않습니다.
더 깊이 읽기
마지막 업데이트:
