본문 바로가기
C.W.K.
Stream
Lesson 05 of 10 · published

JavaScript RegExp 기초

~10 min · javascript, regexp

Level 0패턴 호기심
0 XP0/90 lessons0/15 achievements
0/100 XP to next level100 XP to go0% complete

고정 패턴은 리터럴, 동적 패턴은 생성자로 만들어

  • /pattern/flags 형태의 정규식 리터럴은 짧고 읽기 쉬워. 코드가 파싱될 때 패턴도 함께 정해져.
  • new RegExp('pattern', 'flags')는 문자열로 패턴을 받으므로 실행 중에 값을 조합할 수 있어.

패턴이 코드에 고정돼 있다면 리터럴을 쓰고, 사용자 선택이나 변수로 패턴을 만들어야 할 때만 생성자를 사용해.

정규식 객체와 문자열이 역할을 나눠 가져

  • regex.test(str)는 매칭 여부만 참이나 거짓으로 돌려줘.
  • regex.exec(str)는 일치 정보를 돌려주며, /g와 함께 반복 호출할 수 있어.
  • str.match(regex)/g가 없으면 첫 매칭 정보, 있으면 전체 매칭 목록을 돌려줘.
  • str.matchAll(regex)/g 정규식의 모든 일치 정보를 반복자로 제공해.
  • str.replacestr.replaceAll은 매칭한 부분을 바꾸고, split은 패턴을 경계로 문자열을 나눠.
  • str.search(regex)는 첫 매칭의 위치를 돌려주고, 찾지 못하면 -1을 돌려줘.

/g 정규식은 lastIndex 상태를 가져

같은 전역 정규식에 exec를 여러 번 호출하면 이전 매칭이 끝난 위치부터 다음 검색을 시작해. 그래서 같은 입력을 다시 검사할 때 예상치 못한 실패가 보이면 lastIndex를 확인해야 해. 모든 결과를 한 번에 순회하려는 목적이라면 matchAll이 더 분명해.

생성자 문자열에서는 백슬래시를 한 번 더 써

new RegExp('\\d+')처럼 JavaScript 문자열 단계의 이스케이프가 먼저 적용돼. 원시 백슬래시를 유지하고 싶다면 new RegExp(String.raw`\d+`)처럼 String.raw 태그 템플릿을 사용할 수 있어.

Code

JavaScript 정규식 사용·js
// Literal — 패턴 고정일 때 선호
const datePattern = /(\d{4})-(\d{2})-(\d{2})/;

const m = '2026-05-04'.match(datePattern);
// m[0] = '2026-05-04', m[1] = '2026', m[2] = '05', m[3] = '04'

// Constructor — 변수 필요할 때
const word = 'pippa';
const dynamic = new RegExp(`\\b${word}\\b`, 'i');
// 주의 \\b — 문자열에서 백슬래시 더블링

// test — boolean
/^foo/.test('foobar')  // true

// matchAll — 현대적, 안전한 iteration
for (const m of 'a=1 b=2 c=3'.matchAll(/(\w+)=(\d+)/g)) {
  console.log(m[1], m[2]);
}
// a 1
// b 2
// c 3

// replaceAll 이 /g 필수
'a b c'.replaceAll(/\s/g, '_')  // 'a_b_c'

// Named 그룹 (ES2018+)
const m2 = '2026-05-04'.match(/(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/);
m2.groups  // { year: '2026', month: '05', day: '04' }

External links

Exercise

브라우저 콘솔에서 같은 전역 정규식 객체에 exec('foofoo')를 세 번 연속 호출하고 매번 lastIndex를 기록해. 같은 입력을 matchAll로 순회한 결과와 비교해서 전역 정규식의 상태가 어디에 저장되는지 설명해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.