본문 바로가기

로딩 중...


정규식 테스터

정규식 하나 짜놓고 \d{4}-\d{2}-\d{2} 이게 진짜 내가 원하는 날짜만 잡을지, 아니면 엉뚱한 숫자까지 물어올지 코드에 넣기 전엔 확신이 안 서죠. 로그 파싱용으로 급하게 만든 패턴이 프로덕션에서 절반을 놓치는 걸 뒤늦게 발견하는 게 제일 뼈아픕니다. 정규식 테스터는 패턴과 대상 텍스트를 붙여넣으면 실제로 뭐가 매치되는지 그 자리에서 색으로 칠해 보여 주는 도구입니다.

저도 정규식을 자바스크립트 콘솔이나 코드에 임시로 박아 console.log로 확인하곤 했는데, 여러 줄 텍스트에서 뭐가 잡히고 뭐가 빠졌는지 눈으로 훑기가 어려웠습니다. 매치된 부분만 하이라이트로 딱 보이면 되겠다 싶어서, 입력하는 즉시 결과가 칠해지는 걸 만들었습니다.

사용 방법

  1. 위쪽 패턴 입력창에 정규식을 넣습니다. 양옆의 /는 구분자 표시라 그 사이 알맹이만 쓰면 됩니다. 오른쪽 샘플 버튼을 누르면 날짜 패턴 예시가 채워지니 감을 잡고 시작해도 됩니다.

    정규식 테스터-guide-1

  2. 패턴 아래 플래그 버튼으로 동작 방식을 켭니다. g(모든 매치), i(대소문자 무시), m(여러 줄에서 ^·$를 줄 단위로), s(.이 줄바꿈도 포함), u(유니코드)까지 다섯 개를 지원합니다. 기본은 g가 켜져 있습니다.

    정규식 테스터-guide-2

  3. 아래 테스트 문자열 칸에 대상 텍스트를 붙여넣으면 매치된 부분이 바로 색으로 칠해집니다. 여러 매치는 노랑·초록·파랑으로 번갈아 구분되고, 우측 상단에 총 몇 개가 잡혔는지 개수가 뜹니다. 잘못된 패턴을 넣으면 빨간 오류 메시지로 어디가 틀렸는지 알려 줍니다.

    정규식 테스터-guide-3

정규식 기본 문법

메타문자 몇 개만 손에 익으면 대부분의 패턴을 읽고 쓸 수 있습니다.

  • . : 줄바꿈을 뺀 아무 문자 하나. a.cabc, a9c 모두 매치.
  • * / + : 앞 문자의 반복. *는 0개 이상, +는 1개 이상. ab+ab, abbbb를 잡지만 a 하나는 안 잡습니다.
  • ? : 앞 문자가 있어도 되고 없어도 됨. colou?rcolorcolour를 둘 다 잡습니다.
  • \d : 숫자 하나(0~9). \w는 영문자·숫자·밑줄. \s는 공백류.
  • [] : 문자 후보 묶음. [aeiou]는 모음 하나, [a-z]는 소문자 하나, [^0-9]는 숫자가 아닌 문자 하나.
  • () : 그룹으로 묶기. (ab)+abab처럼 덩어리째 반복을 봅니다. 괄호로 묶은 부분은 캡처 그룹으로도 잡힙니다.
  • ^ / $ : 문자열의 시작과 끝을 가리키는 앵커. ^\d는 첫 글자가 숫자인지, .png$.png로 끝나는지 검사합니다. m 플래그를 켜면 이 앵커가 줄마다 적용됩니다.

{2,}처럼 중괄호로 반복 횟수를 직접 지정할 수도 있습니다. \d{4}는 숫자 정확히 4개, \d{2,4}는 2~4개입니다.

외워두면 두고두고 쓰는 패턴들

밑에 "자주 쓰는 패턴" 칩을 누르면 아래 몇 가지가 바로 입력창에 들어갑니다. 완벽한 검증용이라기보다 로그나 문서에서 해당 형태를 훑어 찾는 용도로 쓰기 좋습니다.

  • 이메일: [a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}. 아이디@도메인.tld 꼴의 주소를 잡습니다.
  • URL: https?://[^\s]+. http 또는 https로 시작해 공백 전까지 이어지는 링크를 통째로 잡습니다.
  • 한국 휴대폰: 01[016789]-?\d{3,4}-?\d{4}. 010류로 시작하고 하이픈이 있든 없든 잡습니다.
  • 날짜: \d{4}[-/]\d{2}[-/]\d{2}. 2024-03-152024/12/31처럼 구분자가 -/든 잡습니다.

여기서 놓치기 쉬운 함정이 하나 있습니다. . 같은 특수문자를 진짜 마침표로 쓰고 싶다면 \.처럼 백슬래시로 이스케이프해야 한다는 점입니다. 이메일 패턴에서 도메인 앞 점을 \.로 쓴 것도 그 이유고요. 이걸 빼먹으면 .이 "아무 문자"로 해석돼서 의도보다 훨씬 넓게 잡힙니다. 패턴이 이상하게 많이 매치될 땐 이스케이프를 안 한 특수문자부터 의심해 보세요.

자주 묻는 질문

패턴 양옆의 슬래시(/)도 같이 입력해야 하나요?

아니요. 양쪽 슬래시는 구분자를 표시해 주는 것일 뿐이므로 그 사이의 패턴 알맹이만 입력하면 됩니다. 예를 들어 날짜를 찾고 싶다면 /\d{4}-\d{2}-\d{2}/ 전체가 아니라 \d{4}-\d{2}-\d{2} 부분만 넣으면 됩니다.

플래그 g, i, m은 각각 어떤 역할을 하나요?

g(global)는 첫 매치에서 멈추지 않고 문자열 전체에서 모든 매치를 찾습니다. i(ignore case)는 대소문자를 구분하지 않고, m(multiline)은 ^와 $를 문자열 전체가 아니라 각 줄의 시작과 끝에 적용합니다. 여러 줄 로그에서 줄 단위로 매치하려면 m을 켜세요.

점(.)이나 괄호 같은 기호를 문자 그대로 찾으려면 어떻게 하나요?

. * + ? ( ) [ ] { } | ^ $ \ 같은 문자는 정규식에서 특별한 의미가 있어서, 글자 자체로 찾으려면 앞에 백슬래시를 붙여 이스케이프해야 합니다. 예를 들어 실제 마침표는 \., 여는 소괄호는 \(로 씁니다. 의도보다 훨씬 많이 매치된다면 이스케이프를 빠뜨린 특수문자가 있는지부터 확인해 보세요.

입력한 패턴이나 테스트 문자열이 서버로 전송되나요?

아니요. 패턴 컴파일과 매칭은 브라우저의 자바스크립트 정규식 엔진으로 100% 클라이언트에서 처리됩니다. 로그나 민감한 데이터를 붙여넣어 테스트해도 외부로 전송되지 않습니다.