regexPlayground

for learn and practice regex

format

/regex?/i

slash를 이용해서, 정규표현식임을 나타내고 두 slash 안에 우리가 찾고자 하는 pattern *('regex?' 부분)*을 작성한다

또, 어떤 옵션을 이용해서 검색할 것인지 flag *('i' 부분)*를 활용한다

따라서 원하는 pattern을 작성하느냐가 regex를 활용하는 데에 있어서 중요하다

regex를 4가지 그룹으로 나누어 문법을 정리해보자

flags

flag의 경우 보편적으로는 globalmultiline을 이용하고,

대소문자를 구분하지 않는 case insensitive 옵션도 때에 따라 사용한다

문법 정리

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 공백 아님

examples

Groups and Rangesa

/gr(e|a)y/gm

gr로 시작하여 e 또는 a 값을 가지고 이후에 y로 끝나는 문자열

즉, grey 또는 gray를 검색

/gr(?:e|a)y/gm

또, 이와 같이 group 시작 부분에 ?: 를 함께 써주면 group이 생성되지 않는다

즉, 검색은 하지만 group으로서는 설정하지 않는다

/gr[aed]y/gm

[] 안의 모든 문자열에 대해서, 하나라도 만족하는 것을 찾을 수 있다

즉, gray 또는 grey 또는 grdy를 검색

참고로, [] 안에서는 특수문자를 위해 따로 앞에 **을 붙이 필요가 없다

/gr[a-f]y/gm

이 경우, - 는 알파벳 순서대로의 모든 문자열을 의미한다

즉, a-fabcdef 와 같은 표기 이므로,

gray, grby, grcy, grdy, grey, grfy를 검색

/[a-f]/gm

이 경우, 어떠한 문자열이든 a 부터 f 까지의 문자열은 모두 찾는다

/[a-zA-Z0-9]/gm

이 경우, 소문자 a 부터 z 까지, 대문자 A 부터 Z 까지, 숫자 0 부터 9 까지 모두 찾는다

/[^a-zA-Z0-9]/gm

^not sign인데, 제외를 의미한다

즉, [] 다음에, ^를 붙여 ^[] 로 표기하면 대괄호 안에 있는 것들을 모두 제외하고 검색하게 된다

따라서, 이 경우, 소문자 a 부터 z 까지, 대문자 A 부터 Z 까지, 숫자 0 부터 9 까지 모두 제외하고 찾는다

Quantifiers (수량)

/gra?y/gm

특정한 문자열 다음에 ? 를 지정하게 되면, 없거나 있거나를 의미한다

따라서, 이 경우, gry 또는 gray를 검색

/gra*y/gm

특정한 문자열 다음에 * 를 지정하게 되면, 없거나 있거나 많거나를 의미한다

따라서, 이 경우, gry 또는 gray 또는 graay 또는 graaay 또는 graaaay 또는 ... 을 검색

/gra+y/gm

특정한 문자열 다음에 + 를 지정하게 되면, 하나 있거나 그 이상의 경우를 의미한다

따라서, 이 경우, gray 또는 graay 또는 graaay 또는 graaaay 또는 ... 을 검색

/gra{2}y/gm

특정한 문자열 다음에 {n} 을 지정하게 되면, 정확하게 n번 반복된 경우를 의미한다

따라서, {2}라고 입력한 경우에는, graay를,

{3}이라고 입력한 경우에는, graaay를 검색

혹은, {2,3} 으로 입력한 경우에는 최소 2개, 최대 3개를 의미하므로, graay 또는 graaay를 검색

혹은, {2,} 으로 입력한 경우에는 최소 2개를 의미하므로, graay 또는 graaay 또는 ... 을 검색

Boundary-type

/\bYa/gm

\b를 앞에 입력하면, 단어 제일 앞 부분에 쓰인 부분만 검색한다

즉, 이 경우, 단어의 제일 처음 시작이 Ya 로 시작하는 단어만 검색한다

가령, YaYaYa 라는 단어가 있다면, 가장 제일 앞 2글자 부분만 검색의 결과값으로 지정된다

/Ya\b/gm

마찬가지로 \b를 뒤에 입력하면, 단어 제일 뒷 부분에 쓰인 부분만 검색한다

즉, 이 경우, 단어의 제일 끝이 Ya 로 끝나는 단어만 검색한다

가령, YaYaYa 라는 단어가 있다면, 가장 제일 뒤 2글자 부분만 검색의 결과값으로 지정된다

또, \b와 같이 소문자가 아닌, \B 와 같이 대문자로 작성하게 되면 위 두 가지 용법을 적용한 것을 제외하는 식이다

가령, \B를 뒤에 입력하면, 단어 제일 뒷 부분에 쓰인 검색어를 제외하는 식이다

/Ya\B/gm

YaYaYa 라는 단어가 있다면, 가장 제일 뒤 2글자 부분을 제외한 앞의 글자 부분만 검색한다

/^Ya/gm

^ 의 경우에는, 단어가 아니라 문장의 시작 부분을 찾는다

/$Ya/gm

$ 의 경우에는, 단어가 아니라 문장의 끝 부분을 찾는다

문장 찾기의 경우, multiline 을 설정하지 않으면 전체 문자열 중에 제일 앞 부분을 의미하므로 주의해야 한다

Character Classes

/./gm

. 의 경우, 줄바꿈 문자를 제외한 모든 문자를 선택한다

만약, 정규 표현식의 으로서의 .가 아니라 문자열 *"."*을 찾고 싶다면

\. 와 같이 \를 앞에 붙여 검색한다

/\d/gm

ddigit의 약자로 이 경우, 모든 숫자를 검색한다

/\D/gm

이 경우, 숫자를 제외한 모든 것을 검색한다

/\w/gm

wword의 약자로 이 경우, 모든 문자를 검색한다

/\W/gm

이 경우, 문자를 제외한 모든 것을 검색한다

/\s/gm

sspace의 약자로 공백을 제외한 모든 것을 검색한다

/\S/gm

이 경우, 공백을 제외한 모든 것을 검색한다

JavaScript에서 활용

const regex = /(?:https?:\/\/)?(?:www\.)?youtu.be\/([a-zA-Z0-9-]{11})/;
const url = "https://www.youtu.be/-ZClicWm0zM";
url.match(regex);
url.text(regex);

References

https://regexr.com/5mhou

https://regexone.com/