WeniVooks

검색

정규표현식 톺아보기 with JavaScript and Python

문자와 패턴의 이해

1. 일반 문자열

가장 기본적인 형태의 정규표현식입니다. 찾고자 하는 문자를 그대로 입력하는 방식입니다.

/hello/gm
/hello world/gm
/Hello/gm
/Hello/gim
/hello/gm
/hello world/gm
/Hello/gm
/Hello/gim

기본적으로 정규표현식은 대소문자를 구분합니다. 대소문자를 구분하지 않으려면 i 플래그를 사용해야 합니다. /hello/는 아래와 같이 매칭됩니다.

  • "hello"은 매칭됩니다.
  • "Hello"은 매칭되지 않습니다.
  • "HELLO"은 매칭되지 않습니다.

2. 문자열의 처음과 끝

캐럿은(^)은 문자열 시작을, 달러는($)는 문자열의 끝을 나타냅니다.

/^hello/   // hello로 시작하는 줄
/world$/   // world로 끝나는 줄
/^hello$/  // hello만 있는 줄
/^hello/   // hello로 시작하는 줄
/world$/   // world로 끝나는 줄
/^hello$/  // hello만 있는 줄

3. 모든 단일 문자

점(.)은 줄바꿈을 제외한 모든 단일 문자와 매칭됩니다.

/h.llo/    // hello, hallo, h@llo 등과 매칭
/./        // 모든 문자열(*과 같은 역할)
/....../   // 모든 6개의 문자열
/h.llo/    // hello, hallo, h@llo 등과 매칭
/./        // 모든 문자열(*과 같은 역할)
/....../   // 모든 6개의 문자열

만약 . 자체의 문자를 사용하고 싶다면 이스캐이프 문자를 사용해야 합니다. 이스케이프 문자는 엔터 위에 있습니다. \ 문자는 역슬러쉬라고도 부릅니다.

4. 이스케이프 문자

이스케이프 문자는 특수한 의미를 가진 메타 문자를 일반 문자로 사용하고 싶을 때 사용합니다. 백슬래시(\)를 사용하여 이스케이프 처리를 할 수 있습니다.

// 메타 문자를 일반 문자로 사용하는 경우
/\./      // 실제 마침표를 찾음
/\^/      // 실제 캐럿 기호를 찾음
/\$/      // 실제 달러 기호를 찾음
/\*/      // 실제 별표를 찾음
/\?/      // 실제 물음표를 찾음
/\+/      // 실제 더하기 기호를 찾음
// 메타 문자를 일반 문자로 사용하는 경우
/\./      // 실제 마침표를 찾음
/\^/      // 실제 캐럿 기호를 찾음
/\$/      // 실제 달러 기호를 찾음
/\*/      // 실제 별표를 찾음
/\?/      // 실제 물음표를 찾음
/\+/      // 실제 더하기 기호를 찾음

실제 예시를 살펴보겠습니다.

// 이메일 주소에서 실제 마침표를 찾는 경우
/user\.name/    // "user.name@example.com"에서 "user.name" 부분 매칭
 
// 가격에서 달러 기호를 찾는 경우
/\$100/         // "$100"에서 "$100" 전체 매칭
 
// 파일 확장자를 찾는 경우
/\.pdf$/     // "document.pdf"에서 ".pdf" 매칭
// 이메일 주소에서 실제 마침표를 찾는 경우
/user\.name/    // "user.name@example.com"에서 "user.name" 부분 매칭
 
// 가격에서 달러 기호를 찾는 경우
/\$100/         // "$100"에서 "$100" 전체 매칭
 
// 파일 확장자를 찾는 경우
/\.pdf$/     // "document.pdf"에서 ".pdf" 매칭

5. 택1

대괄호를 사용하면 대괄호 안에 있는 텍스트 중 택 1합니다. 아래의 경우 hello, hallo, hyllo를 모두 매칭합니다.

/h[eay]llo/  // 대괄호 안에 문자는 문자 1개에 해당!
/h[ea]l../   // 총 5개의 문자
/h[eay]llo/  // 대괄호 안에 문자는 문자 1개에 해당!
/h[ea]l../   // 총 5개의 문자

아래처럼 대쉬(-)를 사용하여 범위를 지정할 수도 있습니다.

/[0-9]/          // 숫자
/[a-z]/          // 소문자 알파벳
/[A-Z]/          // 대문자 알파벳
/[가-힣]/        // 한글 문자
/h[a-f]llo/      // hallo, hbllo, hcllo 등이 매칭
/[a-zA-Z0-9]/    // 모든 알파뱃과 숫자를 찾음
/[^a-zA-Z0-9]/   // 나머지 문자열을 찾음
/[0-9]/          // 숫자
/[a-z]/          // 소문자 알파벳
/[A-Z]/          // 대문자 알파벳
/[가-힣]/        // 한글 문자
/h[a-f]llo/      // hallo, hbllo, hcllo 등이 매칭
/[a-zA-Z0-9]/    // 모든 알파뱃과 숫자를 찾음
/[^a-zA-Z0-9]/   // 나머지 문자열을 찾음

⚠️ 대괄호 안에 이스케이프 문자 사용 시 주의사항

  1. 문자 클래스 [] 안에서는 대부분의 메타 문자가 자동으로 일반 문자로 취급됩니다. 이스케이프 처리를 할 필요가 없습니다. 다만 대괄호가 아닌 추후에 배울 소괄호에서는 이스케이프 처리가 필요합니다.
/[.]/     // 올바른 사용 (이스케이프 불필요)
/[\.]/    // 불필요한 이스케이프
/\[.*]/   // 대괄호([]) 안에 감싸여진 문자열
/\(.*\)/  // 소괄호 안에 감싸여진 문자열
/\\.*\//  // 이미 사용되고 있는 특수문자로 감싸여진 문자열
/-.*-/    // 이스케이프 문자를 사용할 필요가 없는 경우
/\^\^/    // 이스케이프 문자가 필요한 경우
/:\)/     // 이스케이프 문자가 필요한 경우
/[.]/     // 올바른 사용 (이스케이프 불필요)
/[\.]/    // 불필요한 이스케이프
/\[.*]/   // 대괄호([]) 안에 감싸여진 문자열
/\(.*\)/  // 소괄호 안에 감싸여진 문자열
/\\.*\//  // 이미 사용되고 있는 특수문자로 감싸여진 문자열
/-.*-/    // 이스케이프 문자를 사용할 필요가 없는 경우
/\^\^/    // 이스케이프 문자가 필요한 경우
/:\)/     // 이스케이프 문자가 필요한 경우
  1. 백슬래시 자체를 찾을 때는 아래와 같이 사용합니다.
/\\/       // 실제 백슬래시 한 개를 찾음
/\\/       // 실제 백슬래시 한 개를 찾음

6. 부정

대괄호 안에 캐럿(^)를 사용하면 해당 문자를 제외한 문자를 찾습니다.

/h[^ae]llo/   //대괄호 안에 있다면 not에 의미
/[^0-9]/      // 숫자가 아닌 문자
/[^aeiou]/    // 모음이 아닌 문자
/h[^ae]llo/   //대괄호 안에 있다면 not에 의미
/[^0-9]/      // 숫자가 아닌 문자
/[^aeiou]/    // 모음이 아닌 문자

7. 문자 클래스

문자 클래스는 캐릭터 클래스라고도 불리며, 특정 문자 집합을 나타냅니다.

\d    // [0-9]와 동일: 숫자
\D    // [^0-9]와 동일: 숫자가 아닌 문자
\w    // [a-zA-Z0-9_]와 동일: 단어 문자
\W    // [^a-zA-Z0-9_]와 동일: 단어 문자가 아닌 문자
\s    // 공백 문자
\S    // 공백이 아닌 문자
\d    // [0-9]와 동일: 숫자
\D    // [^0-9]와 동일: 숫자가 아닌 문자
\w    // [a-zA-Z0-9_]와 동일: 단어 문자
\W    // [^a-zA-Z0-9_]와 동일: 단어 문자가 아닌 문자
\s    // 공백 문자
\S    // 공백이 아닌 문자

8. 연습 예제

8.1 문제
  1. hello로 시작하는 모든 줄을 찾으세요.
  2. world로 끝나는 모든 줄을 찾으세요.
  3. h로 시작하고 o로 끝나는 5글자 단어를 찾으세요.
  4. 대괄호([]) 안에 있는 3자리 숫자를 찾으세요.
  5. 이메일에서 @ 앞부분이 'paul'인 이메일 주소를 찾으세요.
  6. 'hello'와 'world' 사이에 정확히 한 글자가 있는 경우를 찾으세요.
  7. 010으로 시작하는 전화번호를 찾으세요.
  8. 영문 대소문자 또는 숫자가 아닌 문자를 찾으세요.
  9. 한글로 시작하는 줄을 찾으세요.
  10. https 또는 http로 시작하는 줄을 찾으세요.
8.2 해답
  1. /^hello/gm
  2. /world$/gm
  3. /h[a-z][a-z][a-z]o/gm
  4. /\[\d\d\d\]/gm
  5. /paul@/gm
  6. /hello.world/gm
  7. /010[- .][0-9][0-9][0-9][0-9][- .][0-9][0-9][0-9][0-9]/gm
  8. /[^a-zA-Z0-9]/gm
  9. /^[가-힣]/gm
  10. /^http[s]?/gm
1.1 정규표현식과의 첫 만남1.3 패턴의 반복과 그룹화