정규식 테스트
브라우저의 JavaScript RegExp 엔진으로 패턴을 실행하므로 결과가 직접 작성한 JavaScript 코드와 같습니다. 슬래시 없이 \d{3}-\d{4}처럼 입력하고, g 플래그를 켜면 모든 일치를 찾습니다.
사용 방법
- 패턴을 앞뒤 슬래시 없이 입력합니다. 예: \d{3}-\d{4}
- 플래그를 켜고 끕니다. g 플래그를 켜면 모든 일치를 찾고, 끄면 첫 번째 일치만 보여 줍니다.
- 검색할 텍스트를 붙여 넣습니다. 입력하는 동안 일치 부분이 강조되고, 표에 일치 항목과 캡처 그룹이 나옵니다.
계산 방법
패턴은 브라우저에 들어 있는 자바스크립트 RegExp 엔진으로 컴파일합니다. 그래서 문법과 동작이 직접 짠 자바스크립트 코드에서와 똑같습니다. PCRE, 파이썬, .NET 같은 다른 방언과는 군데군데 다릅니다. 오래된 엔진의 후방 탐색 지원이나 자바스크립트에 없는 소유 수량자가 그런 예입니다.
g 플래그가 있으면 exec를 반복 호출해 일치를 최대 1,000개까지 모읍니다. a*나 전방 탐색처럼 빈 문자열과 일치하면 검색 위치를 한 글자 옮기므로 반복이 반드시 끝납니다.
매칭은 백그라운드 워커에서 돌아갑니다. (a+)+$처럼 치명적 백트래킹이 일어나 1.5초를 넘기면 워커를 멈추고, 페이지가 굳는 대신 시간 초과 메시지를 띄웁니다.
정규식 문법 요약
| 기호 | 뜻 |
|---|---|
| . | 줄바꿈을 뺀 아무 글자 하나(s 플래그면 줄바꿈 포함) |
| \d \w \s | 숫자, 단어 글자(영문·숫자·밑줄), 공백 |
| \D \W \S | \d, \w, \s의 반대 |
| [abc] [^abc] [a-z] | a, b, c 중 하나 / a, b, c를 뺀 글자 / 범위 |
| ^ $ | 텍스트의 시작과 끝(m 플래그면 각 줄의 시작과 끝) |
| \b | 단어 경계 |
| * + ? | 0번 이상, 1번 이상, 0번 또는 1번 |
| {3} {2,5} {2,} | 정확히 3번, 2번에서 5번, 2번 이상 |
| *? +? | 최대한 짧게 일치하는 게으른 수량자 |
| (abc) (?:abc) | 캡처 그룹, 비캡처 그룹 |
| (?<name>abc) | 이름 있는 캡처 그룹 |
| a|b | a 또는 b |
| (?=x) (?!x) | 뒤에 x가 옴 / 오지 않음(전방 탐색) |
| (?<=x) (?<!x) | 앞에 x가 있음 / 없음(후방 탐색) |
| \1 \k<name> | 그룹 1 또는 이름 있는 그룹 역참조 |
플래그
| 플래그 | 효과 |
|---|---|
| g | 전역: 첫 일치만이 아니라 모두 찾음 |
| i | 대소문자 무시 |
| m | 여러 줄: ^와 $가 줄바꿈 위치에서도 일치 |
| s | dotAll: .이 줄바꿈과도 일치 |
| u | 유니코드: 서로게이트 쌍을 한 글자로 보고 \p{...} 사용 가능 |
| y | sticky: 각 일치가 직전 일치가 끝난 자리에서 바로 시작해야 함 |
자주 묻는 질문
어떤 정규식 엔진을 쓰나요?
브라우저에 구현된 자바스크립트 정규식입니다. 여기서 되는 패턴은 직접 작성한 자바스크립트나 타입스크립트의 new RegExp에서도 똑같이 동작합니다.
일치가 하나만 보여요
g(global) 플래그가 없으면 자바스크립트 정규식은 첫 일치에서 멈춥니다. g를 켜면 전부 찾습니다.
패턴이 시간 초과된 이유는요?
(a+)+나 (.*)* 같은 중첩 수량자는 거의 일치할 뻔한 텍스트에서 경우의 수를 기하급수적으로 시도할 수 있습니다. 안쪽을 더 구체적으로 쓰거나 중첩을 없애세요.
입력한 텍스트가 전송되나요?
아니요. 패턴과 텍스트는 모두 브라우저 안에서 처리하고 서버로 보내지 않습니다.