정규식
특정한 문자열의 패턴을 표현하는데 사용하는 문자열 처리 도구로, 주로 텍스트 검색, 텍스트 치환, 데이터 유효성 검사 등에 활용된다.
주요 특징
- 패턴 기반 매칭: 문자열 내에서 원하는 패턴(예: 특정 단어, 숫자 형식 등)을 찾을 수 있습니다.
- 범용성: 다양한 프로그래밍 언어(JavaScript, Python, Java 등)에서 지원합니다.
- 유연성: 단순한 검색부터 복잡한 조건을 적용한 문자열 처리까지 가능합니다.
정규식 기본 문법
패턴(pattern) | 설명 |
|---|
. | 임의의 한 문자 |
\d | 숫자 (0-9) |
\D | 숫자가 아닌 문자 |
\w | 영문자, 숫자, 밑줄 ([A-Za-z0-9_]) |
\W | \w의 반대 |
\s | 공백 문자 (스페이스, 탭, 줄바꿈) |
\S | 공백 문자가 아닌 문자 |
^ | 문자열의 시작 |
$ | 문자열의 끝 |
[] | 문자 집합 |
[^] | 제외 문자 집합 |
* | 0번 이상 반복 (greedy) |
+ | 1번 이상 반복 |
? | 0번 또는 1번 |
{n} | 정확히 n번 반복 |
{n,} | 최소 n번 반복 |
{n,m} | 최소 n번, 최대 m번 반복 |
() | 그룹화 및 캡처 |
(?=...) | 긍정형 전방탐색 |
(?!...) | 부정형 전방탐색 |
JavaScript에서의 정규식 사용
- 정규식 생성
- 리터럴 방식:
/pattern/flags
- 생성자 방식:
new RegExp('pattern', 'flags')
- 플래그(flags)
플래그(flags) | 설명 |
|---|
g | 전역 검색 |
i | 대소문자 구분 없이 검색 |
m | 여러 줄 검색 |
예제
유효성 검사: 이메일
const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
const email = "example@test.com";
console.log(emailRegex.test(email));
유효성 검사: 비밀번호 (8~20자, 영문, 숫자, 특수문자 포함)
const passwordRegex = /^(?=.*[A-Za-z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,20}$/;
const password = "Passw0rd@123";
console.log(passwordRegex.test(password));
데이터 필터링: 전화번호 마스킹
const phone = "010-1234-5678";
const maskedPhone = phone.replace(/(\d{3})-(\d{4})-(\d{4})/, "$1-****-$3");
console.log(maskedPhone);
데이터 추출: URL에서 도메인 이름만 추출
const url = "https://www.example.com/page";
const domainRegex = /https?:\/\/(www\.)?([\w-]+)\.\w+/;
const domain = url.match(domainRegex)[2];
console.log(domain);
데이터 유효성 검사: 숫자만 포함 확인
const numericRegex = /^\d+$/;
console.log(numericRegex.test("12345"));
console.log(numericRegex.test("12345abc"));
데이터 필터링 - 특정 단어 제거
const text = "JavaScript is amazing, and I love JavaScript!";
const filteredText = text.replace(/JavaScript/g, "Programming");
console.log(filteredText);