노트

정규 표현식 기초

Regular Expression

CS#js · 연결된 개념 4개

쉽게 말하면

정규 표현식은 찾고 싶은 글자의 몽타주예요. '숫자 3개, 하이픈, 숫자 4개'처럼 생김새를 짧은 기호로 적어 두면, 그 꼴에 맞는 전화번호를 한 번에 찾고 바꿀 수 있어요.

비유가 깨지는 곳 몽타주에 쓰는 기호가 일반 글자와 겹친다는 게 함정이에요. 사용자 입력을 패턴에 그대로 넣으면 .이 아무 문자로 읽혀 a.b가 a-b에도 맞으니, 꼭 이스케이프해요.

정규 표현식(Regular Expression)은 문자열에서 찾을 패턴을 메타문자(metacharacter)로 기술하는 작은 언어다. JavaScript에서는 리터럴 /pattern/flags나 new RegExp(pattern, flags)로 만든다.

기호의미
^ $문자열의 시작·끝
.아무 문자 하나(줄바꿈 제외)
* + ?0개 이상·1개 이상·0또는1개
[abc] [^/]괄호 안 문자 중 하나·괄호 안을 뺀 하나
\d \s숫자·공백 문자
(…) (?:…)캡처 그룹·비캡처 그룹
a|b둘 중 하나
'010-1234-5678'.replace(/(\d{3})-(\d{4})-(\d{4})/, '$1.$2.$3') // 캡처 그룹 참조
'aabbcc'.replace(/(.)\1+/g, '$1')                            // \1 역참조 → 'abc'
'helloWorld'.replace(/([A-Z])/g, '-$1').toLowerCase()         // 'hello-world'
  • 플래그: g(전체 매치), i(대소문자 무시), m(여러 줄), s(.가 줄바꿈도 매치), u(유니코드), y(sticky)
  • 묶기만 하고 저장할 필요가 없으면 (?:…)를 쓴다. 매치 결과에 그룹이 남지 않고 $1 같은 번호도 차지하지 않는다
  • 문자열로 패턴을 만들 때는 백슬래시를 한 번 더 적는다: /\d+/ ↔ new RegExp('\\d+')
  • 사용자 입력을 패턴에 넣을 때는 반드시 이스케이프(escape)한다. 그러지 않으면 a.b가 a-b에도 맞는다. $&는 "방금 매치된 문자열"이라 각 메타문자 앞에 \를 붙이게 된다
const escapeRegExp = s => s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')
new RegExp(escapeRegExp('a.b')).test('a-b') // false

ES2025에 표준 RegExp.escape()가 들어와 주요 브라우저와 Node.js 24+에서는 직접 만들지 않아도 된다(2026 기준).

URL(Uniform Resource Locator)에 값을 넣을 때의 이스케이프는 encodeURI와 encodeURIComponent, 문자열 처리 알고리즘은 슬라이딩 윈도우·빈도수 세기 패턴와 함께 보면 좋다.

연결된 개념

이 노트를 가리키는 문서

뜻이 가까운 노트

  • XSS

    XSS(Cross-Site Scripting)는 공격자가 넣은 스크립트가 내 사이트의 출처(origin) 권한으로 사용자 브라우저에서 실행되는 공격이다. 같은 출처의 코드로 돌기 때문에 same-origin-policy가 막아 주지 못한다. 그 스크립트는 페이지를 바꾸고, 로그인한 사용자 행세를 하며 요청을 보내고, JS가 읽을 수 있는 데이터(localStorage의 토큰 등)를 빼 갈 수 있다.

  • 템플릿 리터럴 타입

    템플릿 리터럴 타입(Template Literal Types)은 문자열 리터럴 타입을 템플릿 문자열 문법으로 조합해 새 문자열 유니언을 만드는 기능이다. 유니언을 넣으면 가능한 모든 조합이 나온다.

  • ES 모듈과 CommonJS

    ES 모듈(ECMAScript Modules, ESM)은 import/export로 파일 간 의존을 정적으로 선언하는 JavaScript 표준 모듈 시스템이다. Node.js가 먼저 쓰던 CommonJS는 require()/module.exports로 의존을 런타임에 불러온다.

  • 최소 재현

    버그가 여전히 일어나는 가장 작은 코드와 조건을 만드는 것. 원인을 좁히고, 테스트로 고정하고, 남에게 묻기 쉬워진다.

  • NestJS

    NestJS는 TypeScript를 전제로 모듈·의존성 주입(Dependency Injection, DI)·데코레이터(decorator) 구조를 제공하는 Node.js 서버 프레임워크다. 2017년 Kamil Myśliwiec가 만들었고, 구조를 강제하는 방식 때문에 흔히 "Node.js의 Spring"이라 불린다.

보기 옵션