정규 표현식(Regular Expression, RegExp) 활용
정규 표현식(Regular Expression, RegExp)은 문자열에서 특정한 패턴을 찾고, 일치하는 부분을 검색·추출·치환하는 데 사용하는 표현 방식입니다. 프로그래밍에서 문자열을 다룰 때 매우 강력한 도구로 활용됩니다.
1. 정규 표현식의 기본 개념
정규 표현식은 특정한 규칙을 가진 문자열 패턴을 정의하는 표현식입니다.
예를 들어:
- abc → 정확히 "abc" 문자열과 일치
- a.c → 'a'와 'c' 사이에 아무 문자 하나가 있는 패턴
- [0-9]+ → 하나 이상의 숫자로 이루어진 문자열
- ^\d{3}-\d{2}-\d{4}$ → 000-00-0000 형식의 숫자
2. 정규 표현식 기초 문법
정규 표현식은 다양한 기호와 규칙을 사용하여 패턴을 정의합니다.
① 문자 패턴
기호 | 의미 | 예제 | 예제 결과 |
. | 임의의 한 문자 (개행 제외) | a.c | "abc", "a_c" (일치) |
[] | 대괄호 내부의 문자 중 하나 | [abc] | "a", "b", "c" (일치) |
[^] | 대괄호 내부의 문자 제외 | [^0-9] | 숫자가 아닌 문자와 일치 |
- | 범위 지정 | [0-9] | 0부터 9까지 숫자와 일치 |
② 수량자(반복 연산자)
기호 | 의미 | 예제 | 예제 결과 |
* | 0번 이상 반복 | a* | "", "a", "aaa" |
+ | 1번 이상 반복 | a+ | "a", "aaa" (빈 문자열 X) |
? | 0번 또는 1번 존재 | a? | "", "a" |
{n} | 정확히 n번 반복 | a{3} | "aaa" (일치) |
{n,} | 최소 n번 이상 반복 | a{2,} | "aa", "aaa", "aaaa" |
{n,m} | n번 이상 m번 이하 반복 | a{2,4} | "aa", "aaa", "aaaa" |
③ 위치 지정자(앵커)
기호 | 의미 | 예제 | 예제 결과 |
^ | 문자열의 시작 | ^abc | "abc" (일치) / "xabc" (불일치) |
$ | 문자열의 끝 | abc$ | "xabc" (일치) / "abcx" (불일치) |
\b | 단어 경계 | \bcat\b | "cat" (일치) / "cats" (불일치) |
\B | 단어 경계가 아닌 경우 | \Bcat\B | "scattering" (일치) |
④ 그룹과 캡처
기호 | 의미 | 예제 | 예제 결과 |
() | 그룹화 | (abc)+ | "abc", "abcabc" |
` | ` | OR (또는) | `a |
(?:...) | 캡처하지 않는 그룹 | (?:abc)+ | "abcabc" (캡처 X) |
3. 정규 표현식 실전 활용
정규 표현식은 다양한 언어(JavaScript, Python, Java 등)에서 지원되며, 주로 문자열 처리에 사용됩니다.
① 이메일 주소 검증
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
✅ 예제
- test@example.com ✅
- user_123@domain.co.kr ✅
- invalid@domain,com ❌
② 전화번호 검증 (한국 기준)
^01[016789]-\d{3,4}-\d{4}$
✅ 예제
- 010-1234-5678 ✅
- 011-234-5678 ✅
- 02-1234-5678 ❌
③ URL 검증
^(https?:\/\/)?(www\.)?[a-zA-Z0-9-]+\.[a-zA-Z]{2,6}([\/\w.-]*)*\/?$
✅ 예제
- https://google.com ✅
- www.example.com/test ✅
- ftp://site.com ❌
④ 한글 포함 여부 검사
[가-힣]
✅ 예제
- "안녕하세요" ✅
- "Hello World" ❌
4. 정규 표현식 활용 예제
const pattern = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
const email = "test@example.com";
if (pattern.test(email)) {
console.log("올바른 이메일 형식입니다.");
} else {
console.log("잘못된 이메일 형식입니다.");
}
5. 정규 표현식 사용 시 주의할 점
- 과도한 사용 지양
- 간단한 문자열 처리는 일반적인 문자열 메서드(split, replace, find 등)를 활용하는 것이 더 효율적일 수 있음.
- 정확한 패턴 작성
- 너무 범위가 넓거나 협소하면 원치 않는 문자열도 매칭될 수 있음.
- 성능 고려
- 긴 문자열을 다룰 때는 정규 표현식이 성능 저하를 초래할 수 있음.
- new RegExp()를 사용하여 성능 최적화 가능.
6. 정리
✅ 정규 표현식의 주요 활용 분야
- 문자열 검색/추출 (search, match)
- 데이터 검증 (이메일, 전화번호, URL 등)
- 데이터 치환 및 정리 (replace, sub)
- 로그 분석 및 데이터 필터링
정규 표현식을 잘 활용하면 효율적인 문자열 처리가 가능하며, 다양한 프로그래밍 언어에서 강력한 도구로 사용됩니다.
'JavaScript' 카테고리의 다른 글
[JavaScript] Debounce, Throttle, Memoization(성능 최적화 기법) (0) | 2025.02.22 |
---|---|
[JavaScript] 모듈 시스템 (import, export) (0) | 2025.02.22 |
[JavaScript] 디자인 패턴 (Singleton, Factory, Observer) (0) | 2025.02.02 |
[JavaScript] 이벤트 루프 및 비동기 실행 원리 (0) | 2025.02.01 |
[JavaScript] 기본적인 오류 처리 (try...catch) (1) | 2025.02.01 |