예꾸
개발자국
예꾸
전체 방문자
오늘
어제
  • 분류 전체보기 (111)
    • CS (6)
      • 데이터베이스 (5)
      • 운영체제 (0)
      • Computer Architecture (1)
    • 끄적끄적 (4)
    • 이론 (29)
      • 알고리즘 (18)
      • 자료구조 (4)
      • WEB (2)
      • JS (2)
      • Git (2)
      • Python (1)
    • 면접준비 (3)
      • Vue (1)
      • Design Pattern (1)
      • Frontend (1)
    • 개발기술 (20)
      • Git PUSH 자동화 (3)
      • VUE (1)
      • Linux (2)
      • MERN Stack (2)
      • React기반 Gatsby로 블로그 개발하기 (6)
      • Typescript (0)
      • 감정일기장(React) (3)
      • CI CD (3)
    • 코드트리 (6)
      • 블로그 챌린지 (3)
      • 모의시험 (3)
    • 취업준비 (3)
      • 코딩테스트 후기 (3)
    • 프로그래머스 (8)
      • SQL (7)
      • 알고리즘 (1)
    • 백준 (31)
      • 그리디(탐욕법) (6)
      • 구현 (5)
      • 그래프탐색(dfs, bfs) (5)
      • 완전탐색 (5)
      • 문자열 (5)
      • 누적합 (2)
      • DP(다이나믹 프로그래밍) (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 코드트리 추천
  • 백준 문자열
  • 코딩테스트실력진단
  • gatsby
  • 컴퓨터 시스템의 구조
  • 운영체제
  • JS
  • 알고리즘
  • 백준 그리디
  • 프로그래머스
  • 나만의공부노트
  • 자료구조
  • 코드트리
  • 백준 완전탐색
  • 백준 그래프탐색
  • 프로그래머스 SQL
  • javascript
  • React
  • 백준 구현
  • 코딩테스트

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
예꾸

개발자국

정규표현식 (regex)
이론/JS

정규표현식 (regex)

2021. 3. 1. 10:50

위 글은 ellie쌤의 YOUTUBE를 보고 정리한 글입니다

참고사이트 | https://www.youtube.com/watch?v=t3M6toIflyQ

regex

regular expression의 약자로 특정한 규칙을 가진 문자열의 집합을 표현하는데 사용하는 형식언어

쓰임

  1. 원하는 문자열 찾고 수정할 때-웹사이트 주소 등
  2. -전화번호
  3. 사용자가 입력한 데이터가 올바른지 유효성 검사할 경우

정규 표현식 쓰는법

slashes안에 pattern을 적고 flag를 이용해 어떤 옵션을 이용해 검색할 건지 정함

 

flag

어떤 옵션을 이용해 검색할지 주로 global + multiline을 씀

  • g(global) : g 플래그가 붙으면 패턴과 일치하는 모든 것들을 찾습니다. g 플래그가 없으면 패턴과 일치하는 첫 번째 결과만 반환됩니다.
  • m(multiline) : 다중 행 모드(multiline mode)를 활성화합니다. 
  • i : i 플래그가 붙으면 대·소문자 구분 없이 검색합니다. 따라서 A와 a에 차이가 없습니다.
  • s : .이 개행 문자 \n도 포함하도록 ‘dotall’ 모드를 활성화합니다. 
  • u : 유니코드 전체를 지원합니다. 이 플래그를 사용하면 서로게이트 쌍(surrogate pair)을 올바르게 처리할 수 있습니다.
  • y : 문자 내 특정 위치에서 검색을 진행하는 ‘sticky’ 모드를 활성화 시킵니다

 

 

pattern (4가지 방법)

Groups and ranges

  | : 또는

  () : 그룹

  [] : 문자셋, 괄호안의 어떤 문자든

  [^] : 부정 문자셋, 괄호안의 어떤 문자 아닐 때

  (?:) : 찾지만 기억하지는 않음

1. | 
/Hi|Hello/gm

2. ()
//그룹1로 처리됨
/(Hi|Hello)/gm

//그룹 1,2
/(Hi|Hello)|(bye)/gm

3. (?:)
//찾지만 그룹으로 기억하고 싶진 않을 때
//grey, gray, grdy찾음
/gr(?:e|a|d)y/gm

4. []
//여러 문자들을 받을 수 있음
//grey, gray, grdy찾음
/gr[ead]y/gm

//a-z, A-Z, 0-9인 문자들 찾음
/[a-zA-Z0-9]/gm

5. [^]
//a-z, A-Z, 0-9 제외한 문자들 찾음
/[a-zA-Z0-9]/gm

Quantifiers

수량에 관련, 원하는 문자 뒤에 붙여줌

 

  ? : 없거나 있거나 (zero or one)

  * : 없거나 있거나 많거나 (zero or one or many)

  + : 하나 또는 많이 (one or many)

  {n} : n번반복

  {min,} : 최소

  {min, max} : 최소 그리고 최대

1. ?
// gry, gray
/gra?y/gm

2. * 
// gry, gray, graay, graaay...
/gra*y/gm

3. + 
// gray graay graaay
/gra+y/gm

4. {n}
// graay
/gra{2}y/gm

5. {min,}
// graay, graaay, graaaay
/gra{2,}y/gm

6. {min, max}
// max값 포함
// graay graaay
/gra{2,3}y/gm

Boundary-type

  \\b : 단어 경계

  \\b : 단어 경계가 아님

  ^ : 문장의 시작

  $ : 문장의 끝

1. \b
//해당 문자가 단어의 앞에올지 뒤에올지 
// Ya YaYaYa 
/\bYa/gm

// Ya YaYaYa
/Ya\b/gm

2. \B
// \b의 반대
// Ya YaYaYa
/\BYa/gm

// Ya YaYaYa
/Ya\B/gm


3. ^
// Ya YaYaYa
/^Ya/gm

4. $
// Ya YaYaYa
/Ya$/gm

Character classes

  \ : 특수문자를 찾을 때

  . : 모든 글자(줄바꿈 문자 제외)

  \d : digit 숫자

  \D : digit아닌 모든 문자

  \w : word 문자

  \W : word 아닌 것

  \s : space 공백

  \S : 공백 아닌 모든 문자

1. \
// []{}
/\[\]\{\}/gm

// .
/\./gm

// [hello]
\[hello\]gm

2. .
// 모든 숫자, 문자, 띄어쓰기 
/./gm

3. /d
// 123456
//d/gm

4. /D
// 123abc123
//D/gm

5. /w
// 123abc123
//w/gm

6. /W
// 123abc123
//W/gm

7. /s
// 모든 스페이스
//s/gm

8. /S
// 스페이스 아닌 것
//S/gm

 

퀴즈

1. 전화번호 찾기

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


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

2. 이메일 선택

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


dream.coder.ellie@gmail.com
hello@daum.net
hello@daum.co.kr
hello_git@m1-.co.k.r

3. youtube ID만 가져오기

  ?: 사용하면 그룹 선택x

  주소 뒤의 ID(group1)만 할당되는 것 확인 가능

/(?:https?:\/\/)?(?:www\.)?youtu.be\/([a-zA-Z0-9-]{11})/gm

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

regex in js

match 를 사용해서 regex결과값 얻어오기
const regex = /(?:https?:\/\/)?(?:www\.)?youtu.be\/([a-zA-Z0-9-]{11})/
const url = "http://www.youtu.be/-ZClicWm0zM"

url.match(regex)
["http://www.youtu.be/-ZClicWm0zM", "-ZClicWm0zM", index: 0, input: "http://www.youtu.be/-ZClicWm0zM", groups: undefined]

const result = url.match(regex)
result[1] //-ZClicWm0zM

 

추천사이트1 | regexr.com/5mhou

추천사이트2 | regexone.com/

    '이론/JS' 카테고리의 다른 글
    • 비트 연산자 - 비트 부정 연산에 대한 고찰
    예꾸
    예꾸
    비전공자 옒의 개발이야기💻

    티스토리툴바