나에게 있어 정규표현식은 외계어... 두려움 타파를 위해서 응용은 못하지만 정리라도 해 본다. 드림코딩 엘리 님의 영상에 아주 깔끔하게 정리되어 있어서 이해하는데 어렵지는 않았다. 엘리님이 정리해 주신 내용 그대로 옮겨적는 것이며, 적어보면 기억에 좀 더 남는 편이라 그냥 무작정 적어보고 있다.
그나저나 오늘 토요일 오후인데 시간이 좀 느리게 갔으면 좋겠다. 여기 제주도는 오늘 정말 그림을 그려놓은 듯한 날씨이다. 구름이 무슨 애니메이션처럼 둥실둥실 떠다닌다. 멀리서나마 볼 수 있는 바다도 에메랄드 빛이다. 코딩하기 아주 나쁜 날씨다! 작년의 나는 이런 날씨에 집에 있어본 적이 없다. 아마 산이나 바다나 어딘가 나가서 날씨를 즐기고 있었겠지만... 지금의 난 정규표현식 정리해야지 !
character | meaning |
---|---|
\ | 또는 |
() | 그룹 |
[] | 문자셋, 괄호 안의 어떤 문자든 |
[^] | 부정 문자셋, 괄호 안의 어떤 문자가 아닐 때 |
(?:) | 찾지만 기억하지는 않음 |
character | meaning |
---|---|
? | 없거나 있거나 |
* | 없거나 있거나 많거나 |
+ | 하나 또는 많이 |
{n} | n번 반복 |
{min} | 최소 min개 |
{min, max} | 최소 min개, 최대 max개 |
character | meaning |
---|---|
\b | 단어 시작과 끝의 경계 (단어 앞, 뒤로 넣어서 확인할 수 있음) |
\B | \b 와 반대 |
^ | 문장에서 시작하는 단어를 찾음 /^ 단어/ |
$ | 문장의 끝에 해당단어가 있는지 찾음 /단어 $ / |
flag
에서 multi
태그를 선택하지 않으면 전체 문장으로 보기 때문에, 여러 줄에서 문장의 시작과 끝을 검색하고 싶을 때는 m옵션을 추가한다. //gm
character | meaning |
---|---|
\특수문자 | 특수문자열을 찾을 때 \? \. |
. | 줄바꿈 제외 모든 것 |
\d | 모든 숫자 |
D | 숫자가 아닌 모든 것 |
\w | 모든 문자열 |
\W | 문자열을 제외한 모든 것 |
s | 띄어쓰기를 찾음 |
S | 띄어쓰기를 제외한 모든 것 |
아래와 같은 전화번호를 정규 표현식으로 검색하려면?
010 1234 5678 010.1234.5678 02-1234-5678
/\d{2,3}[- .]\d{3}[- .]\d{4}/gm
아래와 같은 이메일을 정규표현식으로 검색하려면?
hyunsoo.kang.arce@gmail.com hyunsoor@naver.com whatsup@yahoo.co.kr
/[a-zA-Z0-9._+-]+@[a-zA-Z0-9_]+\.[a-zA-Z0-9.]+/gm
아래와 같은 유튜브 주소를 찾는데, 해당하는 아이디 routing만 검색하려면?
https://www.youtu.be/-ZClicWm0zM https://youtu.be/-ZClicWm0zM youtu.be/-ZClicWm0zM
/(?:https?:\/\/)?(?:www\.)?youtu.be\/([a-zA-Z0-9-]{11})/gm
-ZClicWm0zM
이 부분만 그룹으로 설정하고 싶어서 ?:
으로 https
와 www
를 묶어줌const regex = /(?:https?:\/\/)?(?:www\.)?youtu.be\/([a-zA-Z0-9-]{11})/;
const url = 'https://www.youtu.be/-ZClicWm0zM'
url.match(regex);
// [매칭되는 전체의 문자열, 매칭되는 그룹의 데이터]
// ["https://www.youtu.be/-ZClicWm0zM",
"-ZClicWm0zM",
index: 0,
input: "https://www.youtu.be/-ZClicWm0zM", groups: undefined]
const result = url.match(match)
result[1] // "-ZClicWm0zM"