Regex Cheat Sheet: 실제 작업의 90%를 처리하는 10가지 패턴
Source: Dev.to
알아두면 좋은 여섯 가지 문자
\d → any digit (0-9)
\w → any word character (letter, digit, underscore)
\s → any whitespace (space, tab, newline)
\D → any NON-digit
\W → any NON-word character
\S → any NON-whitespace
대문자는 역값을 의미합니다. 이것이 전체 패턴입니다.
수량자
+ one or more
* zero or more
? zero or one (optional)
{3} exactly 3
{2,5} between 2 and 5
{3,} 3 or more
*와 +의 차이는 중요합니다: \d*는 빈 문자열도 매치합니다(숫자가 0개여도 괜찮음). \d+는 최소 하나의 숫자가 필요합니다. 확실히 모르겠다면 +를 사용하세요.
가장 많이 복사‑붙여넣는 10가지 패턴
1. 이메일
[\w.-]+@[\w.-]+\.\w{2,}
RFC‑완벽하지는 않지만, 실제 이메일을 처리하는 데 충분합니다.
const emails = text.match(/[\w.-]+@[\w.-]+\.\w{2,}/g);
2. URL
https?:\/\/[\w\-._~:\/?#\[\]@!$&'()*+,;=%]+
s?가 “s”를 선택적으로 만들므로 http와 https 모두를 잡아냅니다.
const urls = text.match(/https?:\/\/[\w\-._~:\/?#\[\]@!$&'()*+,;=%]+/g);
3. 미국 전화번호
\(?\d{3}\)?[-.\s]?\d{3}[-.\s]?\d{4}
123-456-7890, (123) 456-7890, 123.456.7890, 1234567890 등을 처리합니다.
4. IP 주소 (IPv4)
\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b
\b 단어 경계가 중요합니다. 없으면 더 긴 문자열 안의 숫자까지 매치될 수 있습니다.
5. 날짜 (YYYY‑MM‑DD)
\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])
형식을 검증하고 월은 01‑12, 일은 01‑31인지 확인합니다.
6. 헥스 색상
#(?:[0-9a-fA-F]{3}){1,2}\b
짧은 #fff와 긴 #ff00aa 형식을 모두 매치합니다.
7. 큰따옴표 사이의 모든 내용
"([^"]*)"
캡처 그룹 ([^"]*)이 내용을 잡아냅니다. [^"]*는 “따옴표를 제외한 모든 문자, 0번 이상”이라는 뜻입니다.
8. 전체 단어 매치
\bword\b
\b는 단어 경계 앵커입니다. \bcat\b는 “cat”은 매치하지만 “catch”나 “concatenate”는 매치하지 않습니다.
9. 선택적 소수점이 있는 숫자
-?\d+\.?\d*
42, 3.14, -7, -0.5 등을 매치합니다.
10. 여러 개의 공백 (정리용)
\s{2,}
두 개 이상 연속된 공백 문자를 찾습니다. 한 개의 공백으로 교체합니다.
const clean = text.replace(/\s{2,}/g, ' ');
자주 보는 세 가지 실수
1. 마침표를 이스케이프하지 않음. .은 어떤 문자와도 매치합니다. \.은 실제 마침표와만 매치합니다.
2. 탐욕적(greedy) vs 비탐욕적(lazy). 문자열 "hello" and "world"에 ".*"를 적용하면 첫 번째 따옴표부터 마지막 따옴표까지 전체 "hello" and "world"를 매치합니다. 가장 짧게 매치하려면 ".*?"를 사용해 "hello"와 "world"를 각각 별도로 잡을 수 있습니다.
3. g 플래그를 빼먹음. 플래그를 넣지 않으면 첫 번째 매치만 반환됩니다. 전체 매치를 원한다면 g를 추가하세요.
// 첫 번째 매치만
'abc 123 def 456'.match(/\d+/); // ["123"]
// 모든 매치
'abc 123 def 456'.match(/\d+/g); // ["123", "456"]
직접 사용해 보기
실시간 매치 하이라이트와 내장 치트 시트를 제공하는 regex tester를 만들었습니다. 패턴과 텍스트를 붙여넣으면 즉시 매치를 확인할 수 있습니다. 브라우저에서 실행되며, 데이터는 저장되지 않습니다.
전체 치트 시트(lookahead/lookbehind 및 더 많은 예제 포함)는 다음에서 확인하세요.