C.W.K.
Stream
Lesson 06 of 10 · published

JavaScript 플래그 깊이

~8 min · javascript, flags

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

여덟 플래그

ES2024 기준 JavaScript 정규식 플래그:

  • i — case-insensitive
  • g — global (모든 매칭 찾기; matchAllreplaceAll 활성)
  • m — multiline (^$ 가 줄 경계 매칭)
  • s — dotAll (. 가 줄바꿈 매칭)
  • u — Unicode (패턴과 문자열을 Unicode code point 로 처리)
  • y — sticky (lastIndex 에서만 매칭 시작)
  • d — has indices (매칭 객체에 그룹 시작/끝 offset 포함; ES2022+)
  • v — Unicode set (확장 Unicode 기능; ES2024)

플래그 결합

플래그가 어떤 순서로든 concat: /pattern/gimsu. 순서 무관; 중복은 에러.

Unicode 플래그 (/u)

/u 없으면 JavaScript 가 astral plane 글자 (emoji, 드문 아시아 스크립트) 를 surrogate pair 로 처리 — 한 글자가 정규식엔 두 개로 보임. /u 면 글자가 Unicode code point 로 처리.

Unicode 텍스트 매칭할 땐 항상 /u. \p{...} Unicode 카테고리 escape 활성, . 가 emoji 한 단위로 매칭.

Sticky 플래그 (/y)

/y/g 의 더 까다로운 사촌: lastIndex 에서만 매칭. 매칭 사이 junk 스킵 없이 입력을 piece-by-piece 소비하는 토크나이저에 유용.

Code

JavaScript 플래그 실전·js
// Case-insensitive
'Hello'.match(/hello/i)  // ['Hello']

// Multiline — 줄 단위 ^/$
const log = 'line1\nERROR\nline3';
log.match(/^ERROR$/m)  // ['ERROR']
log.match(/^ERROR$/)   // null (전체 문자열이 ERROR 아님)

// dotAll — . 가 줄바꿈 매칭
'a\nb'.match(/a.b/s)  // ['a\nb']
'a\nb'.match(/a.b/)   // null

// Unicode — emoji 한 글자
'\u{1F4A1}'.match(/.+/u)   // ['💡']
'\u{1F4A1}'.length         // 2 (u 플래그 없이 surrogate pair)

// Unicode property escape (/u 필수)
'안녕 hello'.match(/\p{Script=Hangul}+/gu)
// ['안녕']

// Indices 플래그 (/d) — 정확한 위치
const m = 'hello world'.match(/world/d);
m.indices  // [[6, 11]]

External links

Exercise

JavaScript 콘솔에서 emoji 💡 (U+1F4A1) 을 /^.$//^.$/u 로 매칭 시도. 첫째는 실패, 둘째 성공. /u 플래그가 수정하는 surrogate pair 이슈.

Progress

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

댓글 0

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

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