/Regex/g

soor.dev·2021년 5월 1일
0
post-thumbnail

나에게 있어 정규표현식은 외계어... 두려움 타파를 위해서 응용은 못하지만 정리라도 해 본다. 드림코딩 엘리 님의 영상에 아주 깔끔하게 정리되어 있어서 이해하는데 어렵지는 않았다. 엘리님이 정리해 주신 내용 그대로 옮겨적는 것이며, 적어보면 기억에 좀 더 남는 편이라 그냥 무작정 적어보고 있다.

그나저나 오늘 토요일 오후인데 시간이 좀 느리게 갔으면 좋겠다. 여기 제주도는 오늘 정말 그림을 그려놓은 듯한 날씨이다. 구름이 무슨 애니메이션처럼 둥실둥실 떠다닌다. 멀리서나마 볼 수 있는 바다도 에메랄드 빛이다. 코딩하기 아주 나쁜 날씨다! 작년의 나는 이런 날씨에 집에 있어본 적이 없다. 아마 산이나 바다나 어딘가 나가서 날씨를 즐기고 있었겠지만... 지금의 난 정규표현식 정리해야지 !


Group and ranges

charactermeaning
\또는
()그룹
[]문자셋, 괄호 안의 어떤 문자든
[^]부정 문자셋, 괄호 안의 어떤 문자가 아닐 때
(?:)찾지만 기억하지는 않음

Quantifiers

charactermeaning
?없거나 있거나
*없거나 있거나 많거나
+하나 또는 많이
{n}n번 반복
{min}최소 min개
{min, max}최소 min개, 최대 max개

Boundary-type

charactermeaning
\b단어 시작과 끝의 경계 (단어 앞, 뒤로 넣어서 확인할 수 있음)
\B\b와 반대
^문장에서 시작하는 단어를 찾음 /^단어/
$문장의 끝에 해당단어가 있는지 찾음 /단어 $/

flag에서 multi태그를 선택하지 않으면 전체 문장으로 보기 때문에, 여러 줄에서 문장의 시작과 끝을 검색하고 싶을 때는 m옵션을 추가한다. //gm

Character classes

charactermeaning
\특수문자특수문자열을 찾을 때 \? \.
.줄바꿈 제외 모든 것
\d모든 숫자
D숫자가 아닌 모든 것
\w모든 문자열
\W문자열을 제외한 모든 것
s띄어쓰기를 찾음
S띄어쓰기를 제외한 모든 것

연습은 여기서

전화번호 찾기

아래와 같은 전화번호를 정규 표현식으로 검색하려면?

010 1234 5678
010.1234.5678
02-1234-5678

/\d{2,3}[- .]\d{3}[- .]\d{4}/gm

  • 숫자가 최소 2개 최대 3개
  • -, 띄어쓰기, .
  • 숫자 3개
  • -, 띄어쓰기, .
  • 숫자 4개

이메일 찾기

아래와 같은 이메일을 정규표현식으로 검색하려면?

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 이 부분만 그룹으로 설정하고 싶어서 ?:으로 httpswww를 묶어줌

✅ 자바스크립트에서 이용하기

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"

0개의 댓글