Tools mentioned in this article
Open the browser-based tool while you read and try the workflow immediately.
정규표현식이란 무엇인가요?
정규표현식(Regular Expression / Regex)은 문자열의 패턴을 표현하기 위한 특수한 기술 방법입니다. 데이터 유효성 검사, 검색, 치환 등 엔지니어의 일상 업무에서 빠질 수 없는 도구입니다.

왜 정규표현식을 배워야 할까요?
- 효율적인 문자열 조작: 복잡한 조건문 없이 한 줄로 패턴을 특정할 수 있습니다.
- 언어를 가리지 않는 공통 스킬: JavaScript, Python, PHP, Java 등 거의 모든 프로그래밍 언어에서 사용할 수 있습니다.
- IDE 및 에디터에서의 강력한 검색: 코드베이스 전체에서 특정 패턴을 찾을 때 매우 강력한 힘을 발휘합니다.
기본적인 메타 문자
가장 먼저 익혀두어야 할 기본 요소를 소개합니다.
.: 임의의 한 문자와 일치*: 바로 앞 문자가 0회 이상 반복됨+: 바로 앞 문자가 1회 이상 반복됨?: 바로 앞 문자가 0회 또는 1회 나타남^: 행의 시작$: 행의 끝\d: 숫자(0-9)와 일치[a-z]: a부터 z까지 중 임의의 한 문자와 일치
실전 활용 패턴
1. 이메일 주소 형식 체크 (간이 버전)
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
사용자 등록 폼의 입력값 검증 등에 사용됩니다.
2. URL (http/https) 판별
^https?://[\w/:%#\$&\?\(\)~\.=\+\-]+$
문자열 속에서 링크를 추출하거나 URL 형식을 확인할 때 유용합니다.
3. 일본 우편번호
^\d{3}-\d{4}$
‘3자리-4자리’ 형식을 정확하게 추출하고 검증할 수 있습니다.
주의해야 할 점
정규표현식은 강력하지만, **‘ReDoS(정규표현식 서비스 거부 공격)‘**라는 취약점의 원인이 될 수 있습니다.
매우 복잡한 패턴(특히 중첩된 반복문)을 작성하면 특정 입력에 대해 계산량이 폭발적으로 증가할 수 있습니다. 패턴은 가능한 한 단순하게 유지하고, 신뢰할 수 없는 입력을 처리할 때는 실행 시간에 제한을 두는 등의 고려가 필요합니다.
DevToolKits에서 테스트하기
머릿속으로 생각한 정규표현식이 제대로 작동하는지 확인하는 것은 쉬운 일이 아닙니다. 저희 사이트의 **정규표현식 테스트 도구**를 사용해 보세요.
- 입력한 텍스트에서 일치하는 부분을 실시간으로 하이라이트 표시합니다.
- 캡처 그룹의 내용을 목록으로 보여줍니다.
- 플래그(g, i, m) 전환에 따른 동작 변화를 확인할 수 있습니다.
💡 힌트: “이 패턴이 맞나?” 싶을 때는 도구에 다양한 테스트 케이스를 입력해 보며 검증하는 것이 실력 향상의 지름길입니다.
자주 묻는 질문
JavaScript의 match 와 exec 는 무엇이 다른가요?
g 플래그가 있을 때 동작이 갈립니다. str.match(/re/g) 는 일치한 문자열의 배열을 한 번에 돌려주지만 캡처 그룹은 얻을 수 없습니다. re.exec(str) 는 호출할 때마다 하나씩 진행하며 그룹도 함께 돌려주지만, 정규식 객체가 lastIndex 상태를 갖기 때문에 재사용할 때 주의가 필요합니다. 그룹까지 필요하다면 str.matchAll(/re/g) 가 가장 안전합니다.
정규식에서 특수문자를 이스케이프하려면?
. * + ? ^ $ { } ( ) | [ ] \ 앞에 백슬래시를 붙입니다. 사용자 입력을 정규식에 넣을 때는 반드시 이스케이프해야 하며, 그렇지 않으면 의도하지 않은 패턴이 되거나 성능 문제로 이어집니다. 표준 함수는 없지만 str.replace(/[.*+?^${}()|[\]\]/g, '\$&') 가 관용적으로 쓰입니다.
HTML이나 JSON 파싱에 정규식을 써도 되나요?
권하지 않습니다. 둘 다 중첩 구조를 가지며, 정규식은 원리적으로 임의 깊이의 중첩을 다룰 수 없습니다. 얕은 예제에서는 동작하는 것처럼 보여도 실제 데이터에서 무너집니다. HTML은 DOM 파서, JSON은 JSON.parse 를 쓰세요. 정규식이 적합한 것은 ‘한 줄 안에서 완결되는 패턴’입니다.
y(sticky) 플래그는 무엇을 하나요?
lastIndex 위치에서 정확히 일치할 것을 요구합니다. g 는 뒤쪽으로 검색을 진행하지만 y 는 진행하지 않으므로, 토크나이저처럼 ‘앞에서부터 순서대로 잘라내는’ 처리에 적합합니다. 위치가 어긋나면 즉시 실패하기 때문에, 예기치 않은 위치에서 일치하는 사고를 막을 수 있습니다.