문자와 패턴의 이해
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]/ // 나머지 문자열을 찾음
⚠️ 대괄호 안에 이스케이프 문자 사용 시 주의사항
- 문자 클래스
[]
안에서는 대부분의 메타 문자가 자동으로 일반 문자로 취급됩니다. 이스케이프 처리를 할 필요가 없습니다. 다만 대괄호가 아닌 추후에 배울 소괄호에서는 이스케이프 처리가 필요합니다.
/[.]/ // 올바른 사용 (이스케이프 불필요)
/[\.]/ // 불필요한 이스케이프
/\[.*]/ // 대괄호([]) 안에 감싸여진 문자열
/\(.*\)/ // 소괄호 안에 감싸여진 문자열
/\\.*\// // 이미 사용되고 있는 특수문자로 감싸여진 문자열
/-.*-/ // 이스케이프 문자를 사용할 필요가 없는 경우
/\^\^/ // 이스케이프 문자가 필요한 경우
/:\)/ // 이스케이프 문자가 필요한 경우
/[.]/ // 올바른 사용 (이스케이프 불필요)
/[\.]/ // 불필요한 이스케이프
/\[.*]/ // 대괄호([]) 안에 감싸여진 문자열
/\(.*\)/ // 소괄호 안에 감싸여진 문자열
/\\.*\// // 이미 사용되고 있는 특수문자로 감싸여진 문자열
/-.*-/ // 이스케이프 문자를 사용할 필요가 없는 경우
/\^\^/ // 이스케이프 문자가 필요한 경우
/:\)/ // 이스케이프 문자가 필요한 경우
- 백슬래시 자체를 찾을 때는 아래와 같이 사용합니다.
/\\/ // 실제 백슬래시 한 개를 찾음
/\\/ // 실제 백슬래시 한 개를 찾음
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 문제
- hello로 시작하는 모든 줄을 찾으세요.
- world로 끝나는 모든 줄을 찾으세요.
- h로 시작하고 o로 끝나는 5글자 단어를 찾으세요.
- 대괄호([]) 안에 있는 3자리 숫자를 찾으세요.
- 이메일에서 @ 앞부분이 'paul'인 이메일 주소를 찾으세요.
- 'hello'와 'world' 사이에 정확히 한 글자가 있는 경우를 찾으세요.
- 010으로 시작하는 전화번호를 찾으세요.
- 영문 대소문자 또는 숫자가 아닌 문자를 찾으세요.
- 한글로 시작하는 줄을 찾으세요.
- https 또는 http로 시작하는 줄을 찾으세요.
8.2 해답
/^hello/gm
/world$/gm
/h[a-z][a-z][a-z]o/gm
/\[\d\d\d\]/gm
/paul@/gm
/hello.world/gm
/010[- .][0-9][0-9][0-9][0-9][- .][0-9][0-9][0-9][0-9]/gm
/[^a-zA-Z0-9]/gm
/^[가-힣]/gm
/^http[s]?/gm