정규표현식이란?
- 패턴을 통해 원하는 텍스트를 매칭시키는 도구이다.
- 특정 문자열이 있는지 검사하거나 특정 문자열만 변경하거나 하는 등의 기능에 사용된다.
정규표현식 엔진이 동작하는 방식
- 보통 정규표현식의 검색 방식을 '값을 소비한다' 고 표현한다.
- 일단 패턴에 매칭되는 문자를 찾으면 매칭된 문자열을 소비하기 때문이다.
- 소비한다는 것은 엔진이 매칭된 문자의 위치를 전진시킨다는 것이다.
- 그래서 소비 이후에는 더이상 이전의 문자가 매칭되지 않는다.
- 단, 소비되었다고 해서 문자가 지워지거나 변경된 것은 아님을 아는 것이 중요하다.
- 단
Lookaround
의 경우에는 값을 소비하지 않는다.
정규표현식의 구성 요소
- 메타 문자열(Metacharacters): 정규표현식에서 특수한 의미를 갖는 문자들을 말한다.
^
,$
,.
,*
,+
,?
,{}
,[]
,()
,|
,\
- 메타문자열은 반복, 대체, 그룹화와 같은 더 복잡한 패턴을 만드는 것을 도와준다.
- 리터럴(Literal): 메타 문자열을 제외한 일반 문자를 말한다.
아래는 메타 문자열 표이다.
정규표현식 그룹 (Group)
()
기호를 통한 서브 패턴에 의해 매칭된 문자열을 그룹이라고 한다.
그룹의 형태
- 캡쳐링 그룹 (Capturing groups):
(\d{4})-(\d{2})-(\d{2})
은 연월일을 캡쳐할 수 있다.- 캡쳐링 그룹을 통해 연, 월, 일 데이터를 쉽게 분리하여 사용할 수 있다.
- 대체 그룹 (Alter group):
(apple|banana|tomato)
를 이용하면, 셋중 하나가 있다면 일치한다.- 이는 하나의 캡쳐링 그룹으로 취급된다.
- 여러 개의 캡쳐링 그룹으로 나누고 싶다면
(apple)|(banana)|(tomato)
를 사용하면 된다.
- 논 캡쳐링 그룹 (Non-capturing groups):
(?:ab)
캡쳐링이 되는 것을 원하지 않는다면,?:
기호를 통해 논캡쳐링 그룹을 만들 수 있다.
문자 클래스 (Character classes)
- 매칭시킬 문자를 정의하기 위한 방법 중 하나이다.
사용자 정의 문자 클래스 (Custom character classes)
- 사용자 정의 문자 클래스는
[]
(sqaure brackets) 내부에 원하는 문자를 넣어 만들 수 있다.[aeiou]
는 소문자 모음을 매칭시킬 수 있다.[13579]
는 홀수 숫자를 매칭시킬 수 있다.
범위 문자 클래스 (Range character classes)
- 범위 문자 클래스는 문자와 문자 사이 하이픈(
-
) 을 이용해 원하는 문자 범위를 매칭시킬 수 있다.[a-z]
: 영어 소문자 알파벳을 매칭한다.[a-zA-Z]
: 모든 영어 알파벳을 매칭한다.
부정 문자 클래스 (Negative character classes)
- 몇가지를 제외한 나머지를 모두 매칭시키고 싶을 때 사용한다.
[^a]
: a를 제외한 모든 것을 매칭시킨다.
미리 정의된 문자 클래스 (Predefined character classes)
\
가 앞에 붙는 특수한 정규표현식 문자이다.- 미리 정의된 문자 클래스는
[]
내부가 아니어도 잘 동작한다.
종류
\d
: 숫자를 매칭시킨다.\D
: 숫자를 제외한 것을 매칭시킨다.\w
: 알파벳, 숫자, 언더바까지 매칭시킨다.\W
: 알파벳, 숫자, 언더바를 제외하고 매칭시킨다.\s
: 공백 문자열을 매칭시킨다.\S
: 공백 문자열을 제외하고 매칭시킨다.
정규표현식의 용도
- 문자 검색
- 문자 변경 혹은 대체
- 문자 쪼개기
- 문자 검증하기 (이메일, 아이디 글자수 등)
반응형
'자바스크립트 > 정규표현식' 카테고리의 다른 글
정규표현식의 플래그란? (what is flag in regular expression?) (0) | 2023.04.05 |
---|---|
자바스크립트 replace 메서드 정규식 특수 대체 패턴 (0) | 2023.03.10 |
자바스크립트 정규표현식, named capturing group 이란? (0) | 2023.03.06 |
자바스크립트 정규 표현식, exec() 메서드란? (0) | 2023.03.06 |