T

Text Machine

강력한 텍스트 도구를 브라우저에서

정규식 테스터

직접 입력한 텍스트를 대상으로 정규표현식을 실시간으로 작성하고 테스트하세요. 강조 표시된 모든 일치 항목을 한눈에 확인하고, 캡처 그룹을 살펴보며, 치환 결과까지 미리 볼 수 있습니다. 모두 브라우저 안에서 처리됩니다.

정규표현식

/

/g

플래그

테스트 문자열
바꿀 내용

팁: g 플래그를 켜면 첫 번째 항목뿐 아니라 모든 일치 항목이 치환됩니다.

정규식 테스터 사용 방법

  1. 1

    패턴 작성

    패턴 입력란에 정규표현식을 입력한 다음, 플래그 칩(g, i, m 등)을 켜고 꺼서 매칭 동작을 원하는 대로 제어하세요.

  2. 2

    테스트 텍스트 입력

    검색할 텍스트를 ‘테스트 문자열’ 상자에 붙여넣으세요. 패턴을 입력하거나 수정하는 즉시 일치하는 부분이 강조 표시됩니다.

  3. 3

    일치 항목 살펴보기

    결과 목록에서 각 일치 항목과 텍스트 내 위치, 그리고 캡처 그룹이나 네임드 그룹을 확인하여 패턴이 의도대로 동작하는지 점검하세요.

  4. 4

    치환하거나 복사하기

    바꿀 내용을 입력하면 $1 형식의 역참조를 활용한 치환 결과를 미리 볼 수 있으며, 그 결과를 코드나 문서에 바로 복사해 넣을 수 있습니다.

실전 정규표현식: 개발자를 위한 현장 가이드

정규식이 실제로 기술하는 것

정규표현식은 문자열의 집합을 기술하기 위한 작은 패턴 언어입니다. 텍스트가 고정된 값과 같은지를 묻는 대신, 그 텍스트의 형태를 기술합니다. 이를테면 숫자의 나열, 단어 뒤에 앳 기호(@)와 도메인이 이어지는 형태, 알파벳 세 글자 다음에 하이픈(-)이 오는 형태처럼 말이죠. 그러면 엔진이 그 형태에 들어맞는 모든 부분 문자열을 텍스트에서 찾아냅니다. 이 하나의 발상이 거의 모든 언어와 편집기에서 입력값 검증, 찾기·바꾸기, 로그 구문 분석, 토큰화, 데이터 추출을 가능하게 합니다.

이 테스터는 브라우저에 내장된 JavaScript(ECMAScript) 엔진을 사용하며, 이는 Node.js와 웹 앱이 쓰는 것과 동일한 엔진입니다. 따라서 여기서 일치하는 패턴은 여러분의 애플리케이션 코드에서도 똑같이 동작하므로, 패턴을 프로젝트에 붙여넣기 전에 작성하고 디버깅하기에 더없이 충실한 샌드박스가 됩니다.

문자 클래스와 기본 구성 요소

패턴의 대부분은 자기 자신과 일치하는 리터럴 문자이고, 그 사이사이에 몇 가지 특수 토큰이 끼어 있습니다. 대괄호로 묶은 문자 클래스는 집합 안의 문자 중 하나와 일치합니다. 예를 들어 소문자의 범위, 모음의 집합, 또는 숫자 하나와 일치하죠. 약식 표기인 백슬래시 d는 숫자와, 백슬래시 w는 단어 문자(알파벳, 숫자, 밑줄)와, 백슬래시 s는 공백 문자와 일치하고, 점(.)은 줄바꿈을 제외한 모든 문자와 일치합니다. 약식 표기를 대문자로 바꾸면 의미가 반대로 뒤집히는데, 백슬래시 D는 숫자가 아닌 모든 문자를 가리킵니다.

이것들이 바로 나머지 모든 것을 조합해 내는 기본 단위입니다. 예를 들어 16진수 색상을 위한 패턴은 해시 기호(#)를 고정하는 앵커 뒤에 16진수 숫자로 이루어진 문자 클래스를 반복한 형태이고, 단어를 위한 패턴은 그저 백슬래시 w를 한 번 이상 반복한 것입니다. 하나의 거대한 표현식에 의존하기보다는 이런 작은 조각들로부터 패턴을 만들어 나가세요.

앵커, 수량자, 선택(alternation)

앵커는 문자가 아니라 위치와 일치합니다. 캐럿(^) 기호는 문자열의 시작과 일치하고(또는 multiline (m) 플래그를 켜면 각 줄의 시작과 일치하며), 달러 기호($)는 끝과 일치합니다. 단어 경계 토큰인 백슬래시 b는 단어 문자와 단어가 아닌 문자 사이의 경계와 일치하는데, 더 긴 단어 안에 든 부분까지 잡아내지 않으면서 단어 하나 전체를 일치시키는 방법이 바로 이것입니다. 수량자는 반복을 제어합니다. 더하기 기호(+)는 한 번 이상, 별표(*)는 0번 이상, 물음표(?)는 선택(있어도 되고 없어도 됨)을 뜻합니다. 또한 예컨대 어떤 값이 두 번에서 네 번 반복되기를 원할 때처럼, 중괄호 형식을 사용해 정확한 횟수나 범위를 지정할 수도 있습니다.

파이프 기호(|)를 이용한 선택은 ‘또는’을 의미합니다. 즉 cat 또는 dog라는 패턴은 두 단어 중 어느 쪽과도 일치합니다. 선택의 범위를 한정하려면 대안들을 괄호로 묶으세요. 수량자는 기본적으로 탐욕적(greedy)이어서 가능한 한 많이 가져가려 합니다. 수량자 뒤에 물음표(?)를 붙이면 게으른(lazy) 방식이 되어 가능한 한 적게 일치하는데, 태그 하나만 잡으려던 패턴이 그 줄의 마지막 태그까지 모조리 집어삼킬 때 흔히 쓰는 해결책이 바로 이것입니다.

캡처 그룹과 활용법

괄호는 두 가지 역할을 합니다. 패턴의 일부를 묶어 주는 동시에 그 부분이 일치시킨 내용을 캡처합니다. 일치가 이루어지고 나면 캡처된 조각들을 번호가 매겨진 그룹으로 가져올 수 있습니다. 첫 번째 괄호 쌍이 그룹 1이고 그다음이 그룹 2인 식이죠. 이 도구의 결과 목록은 각 그룹을 보여 주므로 의도한 조각을 정확히 뽑아내고 있는지 확인할 수 있습니다. 이메일과 비슷한 문자열을 위한 패턴에서 로컬 부분, 도메인, 확장자를 각각 별도의 괄호로 감싸면 이 세 조각을 개별적으로 다시 읽어 올 수 있습니다.

네임드 그룹은 여는 괄호 바로 뒤의 꺾쇠괄호 안에 이름을 넣는 문법으로 작성하며, 이런 캡처에 밋밋한 번호 대신 읽기 쉬운 이름표를 붙여 주고 별도의 영역에 표시됩니다. 캡처에 따르는 부담 없이 묶기만 하고 싶을 때는 캡처하지 않는 그룹, 즉 여는 괄호 뒤에 물음표(?)와 콜론(:)을 붙인 형태를 쓰면 그룹 번호를 깔끔하게 유지할 수 있습니다. 이렇게 캡처한 내용은 치환 단계에서 참조하는 대상이기도 합니다.

플래그는 매칭 전체를 바꾼다

플래그는 패턴 전체가 적용되는 방식을 바꾸는 수식어입니다. global (g)은 첫 번째에서 멈추지 않고 모든 일치 항목을 찾는데, 이는 단 하나가 아니라 모든 항목을 치환할 때 꼭 필요합니다. ignore-case (i)는 대소문자에 상관없이 알파벳이 일치하게 만듭니다. multiline (m)은 캐럿(^)과 달러($) 앵커를 재정의하여, 입력의 맨 처음과 맨 끝에서만이 아니라 각 줄바꿈 위치에서 일치하도록 합니다.

나머지 플래그들은 상황에 따라 쓰이지만 그래도 중요합니다. dotall (s)은 점(.)이 줄바꿈 문자에도 일치하게 하여 패턴이 여러 줄에 걸칠 수 있게 합니다. unicode (u)는 기본 범위를 벗어난 코드 포인트와 유니코드 속성 이스케이프에 대해 완전한 유니코드 처리를 켭니다. sticky (y)는 각 일치를 바로 앞 일치 직후의 위치에 고정하는데, 토크나이저가 앞서 건너뛰지 않고 입력을 차례로 훑어 나가는 방식이 바로 이것입니다. 여기서 플래그를 켜고 끄며 강조 표시된 일치 항목이 어떻게 달라지는지 지켜보면서 각 플래그에 대한 감을 키워 보세요.

자주 작성하게 될 패턴들

몇 가지 형태는 거듭 등장합니다. 텍스트 덩어리에서 모든 정수를 뽑아내는 패턴은 global (g) 플래그를 켜고 백슬래시 d를 한 번 이상 반복한 것입니다. 대략적인 이메일 검사는 단어 문자 한 개 이상, 앳 기호(@), 단어 문자 한 개 이상, 리터럴 점(.), 그리고 짧게 이어지는 알파벳으로 이루어지는데, 일부러 느슨하게 만든 것이긴 해도 빠르게 걸러 내는 점검 용도로는 충분합니다. 연속된 공백을 잘라 내거나 하나로 합치는 일, 소문자와 하이픈으로 된 슬러그를 검증하는 일, 두 마커 사이의 내용을 추출하는 일은 모두 일상적인 작업입니다.

정말로 복잡한 형식을 하나의 괴물 같은 패턴으로 검증하려는 충동은 억누르세요. 특히 이메일과 URL 문법은 정규식만으로 완전하게 담아내기로 악명이 높습니다. 그런 경우에는 느슨한 패턴에 진짜 파서나 전용 라이브러리를 더하는 편이, 6개월 뒤에 손대기조차 두려워질 읽기 힘든 표현식보다 대체로 낫습니다.

파국적 백트래킹과 회피 방법

엔진의 백트래킹은 정규식을 강력하게 만들어 주는 요소이지만, 동시에 패턴을 폭발적으로 느려지게 만들 수도 있습니다. 패턴에서 수량자가 붙은 두 부분이 같은 문자들을 서로 겹치는 여러 방식으로 일치시킬 수 있을 때(대표적인 예가 그 자체로 반복되는 그룹으로, 안쪽 반복과 바깥쪽 반복이 서로 경쟁하는 경우입니다), 엔진은 결국 일치에 실패하는 문자열을 상대로 천문학적인 수의 조합을 시도할 수 있습니다. 긴 입력에서는 이 때문에 몇 초씩 멈추거나 아예 응답이 없어질 수 있으며, 서버에서는 ReDoS로 알려진 서비스 거부 공격의 통로가 됩니다.

방어책은 구조적입니다. 같은 것에 일치할 수 있는 수량자를 다른 수량자 안에 중첩하지 말고, 너그러운 점(.)보다는 더 구체적인 문자 클래스를 택해 각 단계가 입력을 소비하는 방법이 하나뿐이도록 하며, 가능할 때는 패턴에 앵커를 붙이세요. 위험한 패턴을 꼭 테스트해야 한다면, 먼저 여기서 현실적인 최악의 경우에 해당하는 문자열로 시험해 보세요. 그러면 통제를 벗어난 패턴이 운영 환경의 장애가 아니라 브라우저 탭 하나로 끝나는 대가만 치르게 됩니다.

치환을 안전하게 미리 보기

찾기·바꾸기는 정규식이 매일같이 진가를 발휘하는 영역이며, 치환 입력란을 이용하면 결과를 어딘가에 반영하기 전에 미리 볼 수 있습니다. 치환문에서는 달러 기호와 그룹 번호로 캡처 그룹을 참조하는데, 예컨대 $1(dollar-one)은 첫 번째 그룹이 일치시킨 내용을 그대로 끼워 넣습니다. 이를 이용하면 날짜의 순서를 바꾸거나, 이름의 형식을 다시 맞추거나, 일치 항목을 마크업으로 감쌀 수 있습니다. global (g) 플래그가 없으면 첫 번째 일치 항목만 치환된다는 점을 기억하세요. 모든 항목을 변환하려면 global을 켜세요.

모든 처리는 브라우저의 기본 엔진을 사용해 로컬에서 이루어지므로, 여러분이 붙여넣는 로그 줄이든 소스 코드든 고객 데이터든 무엇도 업로드되거나 기록·저장되지 않습니다. 덕분에 이 테스터는 일치 항목과 치환 결과가 모두 정확해질 때까지 실제 샘플을 가지고 마음껏 다듬어 본 다음, 완성된 패턴을 자신 있게 코드에 복사해 넣을 수 있는 안전한 공간이 됩니다.

자주 묻는 질문

정규표현식이란 무엇인가요?
정규표현식(정규식, regex)은 텍스트를 검색하고 일치시키고 변환하는 데 사용하는 간결한 패턴입니다. 거의 모든 프로그래밍 언어와 텍스트 편집기에서 입력값 검증, 찾기·바꾸기, 구문 분석, 데이터 추출에 폭넓게 활용됩니다.
이 테스터는 어떤 정규식 종류를 사용하나요?
이 도구는 브라우저에 내장된 자바스크립트(ECMAScript) 정규표현식 엔진을 사용합니다. Node.js와 최신 웹 앱이 쓰는 것과 동일한 엔진이죠. 패턴과 플래그는 여러분이 작성한 자바스크립트 코드에서와 똑같이 동작합니다.
플래그는 각각 무슨 의미인가요?
g(global)는 첫 번째에서 멈추지 않고 모든 일치 항목을 찾고, i는 대소문자를 구분하지 않으며, m은 ^와 $가 줄바꿈 위치에서 일치하도록 만듭니다. s는 점(.)이 줄바꿈 문자에도 일치하게 하고, u는 완전한 유니코드 처리를 활성화하며, y(sticky)는 텍스트의 특정 위치에 매칭을 고정합니다.
캡처 그룹은 어떻게 동작하나요?
패턴 안의 괄호는 각 일치 항목에서 일부분을 뽑아내는 캡처 그룹을 만듭니다. 번호가 매겨진 그룹은 $1, $2처럼 참조하고, (?<name>…) 형식으로 작성한 네임드 그룹은 별도로 표시되므로 필요한 데이터만 정확히 추출할 수 있습니다.
내 데이터가 서버로 전송되나요?
아니요. 모든 매칭과 치환은 브라우저의 기본 정규식 엔진을 사용해 전적으로 브라우저에서 실행됩니다. 입력한 내용은 업로드되거나 기록·저장되지 않으므로, 이 테스터는 오프라인에서도 작동하며 텍스트를 완벽하게 보호합니다.

관련 도구

이런 편리한 도구도 함께 사용해 보세요

HTML을 텍스트로 변환

JSON 포매터

JWT 디코더

CSS 그라데이션 생성기

CSS 박스 그림자 생성기

텍스트를 HTML로 변환