정규표현식 (regex / regular expression)
: 문자열에서 특정 문자 조합(패턴)을 찾기 위해 사용하는 형식의 언어이다.
**/pattern/flags**
: / / 안에 원하는 패턴을 작성하며, 뒤에 flag 옵션을 더할 수 있다.
패턴 작성 문법
Groups and ranges
Character | 뜻 |
---|
| |
() | 그룹 |
[] | 문자셋, 괄호안의 어떤 문자든 |
[^] | 부정 문자셋, 괄호안의 어떤 문가 아닐때 |
(?:) | 찾지만 기억하지는 않음 |
Quantifiers
Character | 뜻 |
---|
? | 없거나 있거나 (zero or one) |
* | 없거나 있거나 많거나 (zero or more) |
+ | 하나 또는 많이 (one or more) |
{n} | n번 반복 |
{min,} | 최소 |
{min,max} | 최소, 그리고 최대 |
Boundary-type
Character | 뜻 |
---|
\b | 단어 경계 |
\B | 단어 경계가 아님 |
^ | 문장의 시작 |
$ | 문장의 끝 |
Character classes
Character | 뜻 |
---|
\ | 특수 문자가 아닌 문자 |
. | 어떤 글자 (줄바꿈 문자 제외) |
\d | digit 숫자 |
\D | digit 숫자 아님 |
\w | word 문자 |
\W | word 문자 아님 |
\s | space 공백 |
\S | space 공백 아님 |
플래그
플래그 | 설명 | 해당 속성 |
---|
d | 부분 문자열 일치에 대해 인덱스 생성. | hasIndices |
g | 전역 탐색. | global |
i | 대소문자를 구분하지 않음. | ignoreCase |
m | 여러 줄에 걸쳐 탐색. | multiline |
s | 개행 문자가 .과 일치함. | dotAll |
u | "unicode", 패턴을 유니코드 코드 포인트의 시퀀스로 간주함. | unicode |
y | "접착" 탐색, 대상 문자열의 현재 위치에서 탐색을 시작함. | sticky |
| | |
자바스크립트에서 정규표현식 사용
메서드 | 설명 |
---|
exec() | 문자열에서 일치하는 부분을 탐색합니다. 일치 정보를 나타내는 배열, 또는 일치가 없는 경우 null을 반환 |
test() | 문자열에 일치하는 부분이 있는지 확인합니다. true 또는 false를 반환 |
match() | 캡처 그룹을 포함해서 모든 일치를 담은 배열을 반환합니다. 일치가 없으면 null을 반환 |
matchAll() | 캡처 그룹을 포함해서 모든 일치를 담은 반복기를 반환 |
search() | 문자열에서 일치하는 부분을 탐색합니다. 일치하는 부분의 인덱스, 또는 일치가 없는 경우 -1을 반환 |
replace() | 문자열에서 일치하는 부분을 탐색하고, 그 부분을 대체 문자열로 변경 |
replaceAll() | 문자열에서 일치하는 부분을 모두 탐색하고, 모두 대체 문자열로 변경 |
split() | 정규 표현식 또는 문자열 리터럴을 사용해서 문자열을 부분 문자열의 배열로 나눔 |
📗 예제
** 기본적으로 플래그는 gm으로 설정하여 실습함.
* 기본 탐색
/Hi/gm
**< Groups and ranges >**
* Hi 또는 Hello 찾기
/Hi|Hello/gm
* 그룹으로 지정하여 찾기
/(Hi/Hello)/gm
/(Hi|Hello)|(And)/gm
* grey, gray 찾기 1
/gr(e|a)y/gm
* grey, gray 찾기 2 : 찾아진 값을 그룹으로 보이지 않도록 탐색
/gr(?:e|a)y/gm
* grey, gray 찾기 3 : 해당하는 문자를 집합체처럼 처리해서 []안에 넣어준다.
/gr[ea]y/gm
/gr[a-f]y/gm
/gr[ead]y/gm
* 어떤 문자열이든 a-z, A-Z, 0-9까지, 모두 만족하는 문자 찾기
/[a-z]/gm
/[A-Z]/gm
/[0-9]/gm
/[a-zA-Z0-9]/gm
** 조건에 해당하지 않는 경우 찾기
/[^a-zA-Z0-9]/gm
**< Quantifiers >**
* a가 있는 경우와 없는 경우
/gra?y/gm
* a가 있거나 없거나 많은 경우
/gra*y/gm
* a가 하나만 있거나 많이 있는 경우
/gra+y/gm
* a가 최소 2개 최대 3개까지 있는 경우 / 최소만 지정해도 된다.
/gra{2,3}y/gm
/gra{2,}y/gm
**< Boundary-type >**
* 특정 문자열에서 단어의 시작부분에 있는 Ya 만 선택할 때
/\bYa/gm
* 특정 문자열에서 단어의 뒤에 Ya 만 선택할 때
/Ya\b/gm
** 위와 반대의 케이스 단어의 뒤에 쓰이지 않는 Ya 만 선택할 때 : Ya만 있는 단어는
Ya로 끝나는 단어이기도 하므로 선택되지 않는다!
/Ya\B/gm
* 문장의 시작과 끝에 있는 Ya를 선택할 때
** 시작
/^Ya/gm
** 끝
/Ya$/gm
*** 이때 플래그의 멀티라인 m을 선택하지 않으면, 전체적인 문장에서 찾지 않게 된다.
: 전체 데이터 끝에 있는 Ya만 검색됨.
/Ya$/g
**< Character classes >**
* 특수문자 . (등등)을 찾을 경우
/\./gm
/\[\]/gm
*** 활용 예제 ***
1. 전화번호를 찾을 경우 : -, . , 공백으로 나눠져있음
1) 간단식
/\d\d\d-\d\d\d\d-\d\d\d\d/gm
2) 패턴 만들기 2가지 방식
/\d{2,3}[-. ]\d{3}[-. ]\d{4}/gm
/[0-9]{2,3}[-. ][0-9]{3}[-. ][0-9]{4}/gm
2. 이메일을 찾을 경우
/[a-zA-Z0-9-.]{2,}\@\w{2,}\.[a-zA-Z0-9-.]{2,}/gm
/[a-zA-Z0-9._+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9.]+/gm
3. 유튜브 주소 뒤에 아이디 값만 찾기
1) 패턴의 데이터 찾기.
/(https?:\/\/)?(www\.)?youtu.be\/([a-zA-Z0-9-]{11})/gm
2) 원하는 데이터는 아이디 값이므로, 앞의 주소 패턴 그룹은 제외해준다.
/(?:https?:\/\/)?(?:www\.)?youtu.be\/([a-zA-Z0-9-]{11})/gm
*** 자바스크립트에서 활용해보기
const regex = /(?:https?:\/\/)?(?:www\.)?youtu.be\/([a-zA-Z0-9-]{11})/
const url = 'https://www.youtu.be/-ZClicWm0zM'
url.match(regex)
const result = url.match(regex);
result[1];
🔗 출처