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

정규식 만드는 두 방법

JavaScript 가 두 정규식 문법:

  • Literal: /pattern/flags — 슬래시 사이 작성, 정의 시점 파싱. 더 빠름, 임베드 변수 X.
  • Constructor: new RegExp('pattern', 'flags') — 함수 호출. 더 느리지만 변수 interpolate 가능.

패턴 고정이면 항상 literal. 동적 빌드 필요할 때만 constructor.

메서드

JavaScript 가 정규식 메서드를 RegExp 객체와 String 사이 분할:

  • regex.test(str) — boolean: 매칭?
  • regex.exec(str) — 첫 매칭 (또는 /g 플래그면 iterate).
  • str.match(regex) — 첫 매칭, 또는 /g 플래그면 모든 매칭.
  • str.matchAll(regex) — 모든 매칭 iterator (/g 필수).
  • str.replace(regex, replacement) — 첫 거 치환 (또는 /g 면 다).
  • str.replaceAll(regex, replacement) — 다 치환 (정규식이 /g 필수).
  • str.split(regex) — split.
  • str.search(regex) — 첫 매칭 인덱스, 못 찾으면 -1.

알아둘 만한 quirk

/g 플래그가 stateful. /g 정규식이 exec 호출 가로질러 lastIndex 기억. "내 정규식이 첫 번엔 매칭하는데 두 번째 안 함" 버그 원인. matchAll 이 현대적, 더 안전한 대안.

Constructor 문자열의 백슬래시 더블링 필요. new RegExp('\\d+'), '\d+' 아님. Raw string 없는 Python 같은 문제 — JavaScript 는 정규식용 raw string 등가물 없음.

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

브라우저 콘솔에서 같은 /foo/g.exec('foofoo') 호출 세 번 연속. 변하는 lastIndex 메모. 그 다음 matchAll 로 같은 거 — iteration 이 self-contained 한 거 인지.

Progress

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

댓글 0

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

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