1 분 소요

RegExp 기본 개념

  • 정규 표현식(Regular Expression) : 문자열에서 검색·일치·추출·치환 패턴을 정의
  • JavaScript에 내장된 RegExp 객체로 작성·조작 가능
const pattern = /abc/i; // 리터럴 방식 (대소문자 무시)
const pattern2 = new RegExp("abc", "i"); // 생성자 방식

RegExp 객체 생성 방법

리터럴 방식 🔸

const regex = /hello\d+/gi; // 숫자 포함 hello 전역·대소문자 무시

생성자 방식 🔸

const regex = new RegExp("hello\\d+", "gi");

플래그 g(global), i(ignore case), m(multiline) 등 조합 가능


핵심 메서드: exec() vs test()

메서드 반환 용도
exec(str) 일치 배열 또는 null 캡처 결과 필요할 때
test(str) true / false 일치 여부만 필요할 때
const str = "abbcdefabgh";
const hit = /ab+/.exec(str); // ["abb"]
const exist = /ab+/.test(str); // true

자주 쓰는 정규식 플래그

플래그 설명 프로퍼티
g 전역 검색 regex.global
i 대·소문자 무시 regex.ignoreCase
m 여러 줄 검색 regex.multiline
const r = /abc/gi;
console.log(r.source); // "abc"

패턴 구성 요소 🌐

패턴 의미 예시
. 임의의 한 글자 /h.t/ → hat, h5t
* 앞 문자가 0회 이상 /go*gle/
+ 앞 문자가 1회 이상 /lo+l/
? 앞 문자가 0 또는 1회 /colou?r/
^ $ 문자열 시작·끝 /^Hi$/
[abc] a 또는 b 또는 c /[aeiou]/
\d 숫자(0-9) /\d{4}/
\w 단어 문자 /\w+/
\s 공백 문자 /\s+/

기타 유용 메서드

const regex = /abc/i;
console.log(regex.toString()); // "/abc/i"
  • flags·source 프로퍼티로 플래그·패턴 확인

실전 예시 🔧

// 1) 이메일 검증
const email = /^[\w.-]+@[\w.-]+\.\w+$/;
console.log(email.test("user@test.com")); // true

// 2) 하이라이트 치환
const txt = "The rain in Spain";
console.log(txt.replace(/ain/g, "<b>$&</b>"));
// The r<b>ain</b> in Sp<b>ain</b>

질문 정리

Q1. 왜 new RegExp() 보다 리터럴 방식을 많이 쓰나요?

리터럴은 가독성이 높고, 스크립트 로드 시 정규식이 바로 컴파일됩니다.

Q2. 플래그를 동적으로 변경하려면?

const src = /abc/i.source;
const dynamic = new RegExp(src, "gi"); // 기존 패턴 재사용

Q3. exec 반환 배열에서 인덱스·원본문자열을 알고 싶어요!

const res = /ab+/.exec("xxabbbxx");
console.log(res.index); // 2 (매치 시작 위치)
console.log(res.input); // "xxabbbxx"

정리

  • exec() → 일치 반환, test() → 일치 여부 반환
  • 플래그로 전역·대소문자·멀티라인 검색을 제어
  • 정규식은 검증·파싱·치환 등 문자열 처리에 필수!

카테고리:

업데이트:

댓글남기기