for learn and practice regex
/regex?/i
slash
를 이용해서, 정규표현식임을 나타내고 두 slash
안에 우리가 찾고자 하는 pattern
*('regex?' 부분)*을 작성한다
또, 어떤 옵션을 이용해서 검색할 것인지 flag
*('i' 부분)*를 활용한다
따라서 원하는 pattern
을 작성하느냐가 regex를 활용하는 데에 있어서 중요하다
regex를 4가지 그룹으로 나누어 문법을 정리해보자
flag
의 경우 보편적으로는 global
과 multiline
을 이용하고,
대소문자를 구분하지 않는 case insensitive
옵션도 때에 따라 사용한다
Character | 뜻 |
---|---|
| |
또는 |
() |
그룹 |
[] |
문자셋, 괄호안의 어떤 문자든 |
[^] |
부정 문자셋, 괄호안의 어떤 문가 아닐때 |
(?:) |
찾지만 기억하지는 않음 |
Character | 뜻 |
---|---|
? |
없거나 있거나 (zero or one) |
* |
없거나 있거나 많거나 (zero or more) |
+ |
하나 또는 많이 (one or more) |
{n} |
n번 반복 |
{min,} |
최소 |
{min,max} |
최소, 그리고 최대 |
Character | 뜻 |
---|---|
\b |
단어 경계 |
\B |
단어 경계가 아님 |
^ |
문장의 시작 |
$ |
문장의 끝 |
Character | 뜻 |
---|---|
\ |
특수 문자가 아닌 문자 |
. |
어떤 글자 (줄바꿈 문자 제외) |
\d |
digit 숫자 |
\D |
digit 숫자 아님 |
\w |
word 문자 |
\W |
word 문자 아님 |
\s |
space 공백 |
\S |
space 공백 아님 |
/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-f는 abcdef 와 같은 표기 이므로,
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 까지 모두 제외하고 찾는다
/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 또는 ... 을 검색
/\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
을 설정하지 않으면 전체 문자열 중에 제일 앞 부분을 의미하므로 주의해야 한다
/./gm
.
의 경우, 줄바꿈 문자를 제외한 모든 문자를 선택한다
만약, 정규 표현식의
으로서의 .
가 아니라 문자열 *"."*을 찾고 싶다면
\.
와 같이 \
를 앞에 붙여 검색한다
/\d/gm
d
는 digit의 약자로 이 경우, 모든 숫자를 검색한다
/\D/gm
이 경우, 숫자를 제외한 모든 것을 검색한다
/\w/gm
w
는 word의 약자로 이 경우, 모든 문자를 검색한다
/\W/gm
이 경우, 문자를 제외한 모든 것을 검색한다
/\s/gm
s
는 space의 약자로 공백을 제외한 모든 것을 검색한다
/\S/gm
이 경우, 공백을 제외한 모든 것을 검색한다
const regex = /(?:https?:\/\/)?(?:www\.)?youtu.be\/([a-zA-Z0-9-]{11})/;
const url = "https://www.youtu.be/-ZClicWm0zM";
url.match(regex);
url.text(regex);