[JS] 16. 정규식




1. 정규 표현식

문자열에 나타는 특정 문자 조합과 대응시키기 위해 사용되는 패턴

정규식 만들기

  • 정규식 리터럴 : /ab+c/ (슬래시로 감싸기)
  • RegExp 객체의 생성자 함수 호출 : let re = new RegExp("ab+c")



단순 패턴 사용하기

/abc/
어떤 문자열 s에서 왜곡없이 정확하게 abc가 있는 경우
ab c 안된다.


특수 문자 사용하기

단순보다 더 복잡한 검색이 필요한 경우
ex) a 다음에 bbbbbbbb 다음에 c (b의 갯수는 상관 x) : /ab*c/
*: 바로 앞 문자가 0개 이상


2. 정규식에서의 특수문자 규칙

그룹핑 / 범위

  • | : 또는 한개 선택 /(a|b|c)/ a 또는 b 또는 c
  • () : 그룹핑
  • [] : 문자셋, 괄호안 어떤 문자든 하나 선택 /[A-Za-z0-9]
  • [^] : 부정 문자셋, 괄호안 어떤 문자가 아닐 때
  • (?:) : 그룹으로 찾지만 기억하지 않는다.



최소, 최대 수량

  • ? : zero or one
  • * : zero or more
  • + : one or more
  • {n} : n번 반복
  • {min,} : 최소 min개
  • {min, max} : 최소 min, 최대 max개



경계

  • \b : 띄어쓰기 기준 단어 경계
  • \B : 단어 경계가 아니다
  • ^ : 문장의 시작
  • $ : 문장의 끝



문자

  • \ : 특수문자 문자를 표현할 때
  • . : 어떤 글자 (줄바꿈 문자 제외)
  • \d : digit 숫자
  • \D : digit 숫자 아님
  • \w : word 문자
  • \W : word 문자 아님
  • \s : space 공백
  • \S : space 공백 아님



3. 정규식 연습하기

정규식 연습하기

Hi there, Nice to meet you. And Hello there and hi.
I love grey(gray) color not a gry, graay and graaay. grdy
Ya ya YaYaYa Ya

abcdefghijklmnopqrstuvwxyz
ABSCEFGHIJKLMNOPQRSTUVWZYZ
1234567890

.[]{}()\^$|?*+

010-898-0893
010 898 0893
010.898.893
010-405-3412
02-878-8888

dream.coder.ellie@gmail.com
hello@daum.net
hello@daum.co.kr

http://www.youtu.be/-ZClicWm0zM
https://www.youtu.be/-ZClicWm0zM
https://youtu.be/-ZClicWm0zM
youtu.be/-ZClicWm0zM



전화번호 뽑아내기

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




이메일 뽑아내기

/[a-zA-Z0-9._]+@[a-zA-Z]+\.[a-zA-Z0-9.]+/




유튜브 주소 뽑아내기

/(?:https:\/\/){0,1}(?:www.){0,1}youtu\.be\/(-\w{10})/




4. 정규식 활용하기

const regex = /(?:https:\/\/){0,1}(?:www.){0,1}youtu\.be\/(-\w{10})/
const url = "http://www.youtu.be/-ZClicWm0zM"
const result = url.match(regex)

console.log(result)
// [
//   'www.youtu.be/-ZClicWm0zM', // 매칭되는 전체 문자열
//   '-ZClicWm0zM', // 그룹 내용
//   index: 7,
//   input: 'http://www.youtu.be/-ZClicWm0zM',
//   groups: undefined
// ]

console.log(result[1]) //-ZClicWm0zM