JavaScript 정규식(RegExp) 완전 정리
정규식은 외울 필요 없습니다. 패턴만 이해하면 필요할 때 조합해서 쓸 수 있습니다. 자주 쓰는 메타문자와 패턴을 한 곳에 정리했습니다.
작성 방법
// 리터럴 방식
/패턴/플래그
// RegExp 객체 방식
new RegExp("패턴", "플래그")
플래그
| 플래그 | 설명 |
|---|---|
g |
전체에서 모든 일치 항목 찾기 |
i |
대소문자 구분 없이 검색 |
m |
여러 줄 모드 (^, $를 각 줄에 적용) |
주요 메타문자
| 문자 | 의미 |
|---|---|
. |
임의의 한 문자 |
^ |
문자열 시작 |
$ |
문자열 끝 |
* |
0번 이상 반복 |
+ |
1번 이상 반복 |
? |
0번 또는 1번 |
{n} |
정확히 n번 반복 |
{n,m} |
n번 이상 m번 이하 반복 |
[abc] |
a, b, c 중 하나 |
[^abc] |
a, b, c 제외 |
| |
OR |
() |
그룹화 |
기본 사용법
패턴 확인
const text = "Hello World!";
/World/.test(text); // true
text.match(/World/); // ["World"]
문자열 교체
"I love JavaScript!".replace(/JavaScript/, "Vue.js");
// "I love Vue.js!"
패턴 모음
이메일
const email = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
email.test("example@example.com"); // true
휴대전화 (010-0000-0000)
const phone = /^010-\d{3,4}-\d{4}$/;
phone.test("010-1234-5678"); // true
비밀번호
대문자 1개 이상, 소문자 1개 이상, 숫자 1개 이상, 특수문자(!$^&*) 1개 이상, 8~20자리
const password = /^(?=.*[A-Z])(?=.*[a-z])(?=.*\d)(?=.*[!$^&*])[A-Za-z\d!$^&*]{8,20}$/;
한글 + 영문만
const korEng = /^[가-힣a-zA-Z]+$/;
영문만
const eng = /^[a-zA-Z]+$/;
알파벳 + 숫자 + 하이픈만
const slug = /^[a-zA-Z0-9\-]+$/;
slug.test("Hello-World"); // true
slug.test("Hello World"); // false — 공백 불가
slug.test("Hello_123"); // false — 밑줄 불가
특정 문자 제외 패턴
/^[^-]+$/ // 하이픈(-) 제외
/^[^0-9]+$/ // 숫자 제외
/^[^abc]+$/ // a, b, c 제외
/^[^-_]+$/ // 하이픈, 밑줄 제외