주요 콘텐츠로 건너뛰기
FreeOnlineTools Go
한국어
참조

정규 표현식 치트 시트: 구문, 플래그, 일반 패턴

작성자: FreeOnlineTools Team · 2026-08-28에 업데이트됨

빠른 답변

정규식은 리터럴 문자, 메타 문자(., \d, \w, \s), 수량자(*, +, ?, {n,m}), 앵커(^, $, \b) 및 그룹((...), [...])을 결합합니다. g(전역), i(대소문자 구분), m(여러 줄)과 같은 플래그는 일치 동작을 변경합니다. 테스트 패턴은 코드에 포함되기 전에 Regex Tester에 적용됩니다.

소개

정규식(regex)은 압축 형식 언어를 사용하여 텍스트 패턴을 설명합니다. 모든 최신 프로그래밍 언어, 편집기 및 검색 도구에서 지원됩니다. 이 치트 시트는 ECMAScript(JavaScript에서 사용)로 정의된 구문과 복사하고 조정할 수 있는 일반적인 패턴에 대한 참조입니다. 정규식 테스터를 사용하여 브라우저의 샘플 텍스트에 대해 어떤 패턴을 시험해 보세요.

단계별

  1. 문자 클래스 - 문자 세트와 일치

    [abc]는 a, b 또는 c와 일치합니다. [^abc]는 a, b, c를 제외한 모든 항목과 일치합니다. [a-z]는 모든 소문자와 일치합니다. 사전 정의된 클래스: \d = [0-9], \D = 숫자가 아님, \w = [A-Za-z0-9_], \W = 단어가 아님, \s = 공백, \S = 공백이 아님, . = 개행을 제외한 모든 문자(개행을 포함하려면 s 플래그를 사용하십시오).

  2. 수량자 - 반복할 횟수

    * = 0 이상. + = 1 이상. ? = 0 또는 1. {n} = 정확히 n. {n,} = 최소한 n. {n,m} = n과 m 사이. 추가하다 ? 게으른 일치(예: *?는 가능한 한 적은 수로 일치). Greedy가 기본값이며 중첩 패턴에서 치명적인 역추적을 일으킬 수 있습니다.

  3. 앵커와 경계 —일치할 위치

    ^는 문자열(또는 m 플래그가 있는 줄)의 시작과 일치합니다. $는 끝과 일치합니다. \b는 단어 경계(\w와 \W 사이)와 일치합니다. \B는 단어 경계가 아닌 것과 일치합니다. 앵커는 너비가 0이므로 문자를 사용하지 않고 위치를 테스트합니다.

  4. 그룹 및 교대

    (abc)는 캡처 그룹입니다. $1, $2를 교체품으로 사용하세요. (?:abc)는 비캡처 그룹입니다. (?=abc)는 미리보기입니다(다음 내용을 확인합니다). (?!abc)는 부정적인 예측입니다. (?<=abc)는 뒤돌아보기입니다(ES2018+). a|b는 교대(a 또는 b)입니다.

  5. 플래그 - 일치 동작 변경

    g = 전역(첫 번째 일치 항목뿐만 아니라 모든 일치 항목 찾기) i = 대소문자를 구분하지 않습니다. m = 여러 줄(^ 및 $ 일치 줄 경계) s = dotAll(.은 개행과 일치). u = 유니코드(패턴을 유니코드 코드 포인트로 처리합니다. 이모티콘 및 아스트랄 문자에 필요함) y = 고정(lastIndex에서만 일치).

예

이메일 주소 일치(실용, RFC 5322 단순화됨)

입력: Pattern: /^[^\s@]+@[^\s@]+\.[^\s@]+$/

산출: 'user@example.com' 및 'a.b@sub.domain.co'와 일치하지만 'plainaddress' 또는 '@no-user.com'과는 일치하지 않습니다.

CSS에서 모든 16진수 색상 코드를 추출합니다.

입력: Pattern: /#[0-9a-fA-F]{3,8}\b/g

산출: In 'color: #fff; background: #1a2b3c4d' finds ['#fff', '#1a2b3c4d']

ISO 8601 날짜 확인(YYYY-MM-DD)

입력: Pattern: /^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$/

산출: '2026-08-28'과 일치하지만 '2026-13-01' 및 '2026-02-31'은 거부됩니다.

캡처링 그룹을 사용하여 숫자를 #으로 바꾸기

입력: '주문 42 배송'은 /(\d+)/g →'#$1'로 대체되었습니다.

산출: '주문번호 42가 배송되었습니다.'

일반적인 문제

  • 너무 많이 일치하는 탐욕 수량자: '<a><b>'의 '<.*>'는 '<a>' 대신 전체 문자열 '<a><b>'와 일치합니다. '<a>'를 먼저 일치시키려면 '<.*?>'(게으른)을 사용하십시오.
  • 치명적인 역추적: 입력 'aaaaaaaaaaaaaaaa!'에 (a+)+b와 같은 중첩된 수량자 기하급수적인 시간이 걸릴 수 있습니다. 패턴을 다시 작성하거나 지원되는 경우 원자 그룹/소유 수량자를 사용하세요.
  • 유니코드에 대한 u 플래그를 잊어버린 경우: /^.$/는 단일 코드 단위와 일치하므로 '😀'(2개의 코드 단위)와 같은 이모티콘은 u 플래그가 없으면 실패합니다. 아스트랄 문자를 일치시킬 때는 항상 u를 추가하세요.
  • \b(단어 경계)를 \s(공백)와 혼동: \b는 단어와 단어가 아닌 문자 사이에서 일치하므로 문자열의 시작/끝에서도 작동합니다. \s는 실제 공백 문자와만 일치합니다.

팁

  • 정규식을 프로덕션 코드에 포함하기 전에 항상 정규식 테스터에서 일치하는 샘플과 일치하지 않는 샘플 모두에 대해 테스트하십시오. 극단적인 경우는 놓치기 쉽습니다.
  • 단일 문자의 경우 대체(a|b|...|z)보다 문자 클래스 [a-z]를 선호합니다. 클래스가 더 빠르고 명확합니다.
  • 캡처된 값이 필요하지 않은 경우 비캡처 그룹(?:...)을 사용합니다. 캡처는 성능 비용이 적고 결과 배열을 복잡하게 만듭니다.
  • 핫 루프 내부가 아닌 모듈 범위에서 new RegExp() 또는 리터럴을 사용하여 정규식을 한 번 컴파일합니다. 모든 반복에서 동일한 패턴을 다시 컴파일하면 CPU가 낭비됩니다.

관련 도구

관련 가이드

참고자료