정규표현식

2021. 3. 4. 17:39개발이야기

728x90
반응형

정규 표현식(Regular Expression)   /정규표현식/플래그

  • 텍스트에서 우리가 원하는 특정한 패턴을 찾을 때 아주 요긴하게 쓰일 수 있다.
  • 예) 아주 긴 글에서 전화번호 형태의 패턴을 찾거나 웹사이트 형태의 패턴을 찾을 때도 사용될 수 있음
  • 찾아진 문자열을 다른 문자열로 변경도 가능
  • 또는 사용자가 입력한 데이터가 이메일이나 패스워드와 같은 특정한 패턴에 부합하는지 - 유효성 검사를 할 때에도 쓰일 수 있음
  • // 슬래쉬를 이용해서 나타내주면 된다. 슬래쉬 안에 우리가 찾고자하는 패턴을 작성해주면 된다. 그리고 어떤 옵션으로 검색할 건지 플래그를 활용할 수 있다.

 

 

플래그

  • 글로벌과 멀티라인을 이용할 것임
    • 글로벌: 매칭되는 다수의 결과값을 기억할 수 있는 것을 말함
    • 멀티라인: 한 줄 한 줄

 


1. 그룹,레인지

  • 일반 텍스트 검사
    • /Hi/gm정규표현식에서도 그냥 일반 텍스트를 검사할 수 있다.
  • | 또는(OR)
    • /(Hi|Hello)/gm:    | (OR 연산자)를 사용할 수 있음
  • () 그룹
    • /(Hi|Hello)/gm  : 이렇게 소괄호로 묶으면 같은 그룹1안에 들어간다.
    • /(Hi|Hello)|(And)/gm :  hi혹은hello 그룹을 찾거나 / And라는 그룹을 찾게 된다
    • /gr(e|a)y/gm : gr로 시작하면서 e혹은 a를 가지고 있고 y로 끝나는 단어를 찾고 싶을 때 (grey, gray)
  • (?:) 찾지만 기억하지는 않음
    • /gr(?:e|a)y/gm  : ?:을 이용하면 찾아지긴 하지만 더 이상 그룹이 지정되지 않는다.
  • [] 문자셋, 괄호안의 어떤 문자든
    • /gr[aed]y/gm : []대괄호안에 들어가는 문자중에 하나라도 만족하는 것이 있을 때 이용할 수 있음
    • /gr[a-f]y/gm : [a-f]: a부터 f까지 만족하는 것으로 작성 가능
  • [^] NOT, 괄호안의 문자가 아닐 때
    • /[^a-z]/gm : a부터z 를 제외하고 문자를 찾음

 

 

 

2. 수량

      • ? 없거나 있거나(zero or one)
        • /gra?y/gm : a가 없거나 있거나를 찾음(gry, gray)
      • * 없거나 있거나 많거나 (zero or more)
        • /gra*y/gm : a가 없거나 있거나 많거나를 찾음(gry, gray, graay, graaay…)
      • + 하나 또는 많이(one or more)
        • /gra+y/gm : a가 하나있거나 그 이상인 경우를 찾음(gray, graay, graaay..)
      • {n} n번 반복
        • /gra{2}y/gm : a가 2개 나타나는 경우를 찾음 (graay)
      • {min, } 최소
        • /gra{2,}y/gm : a가 최소 2개부터나타나는 경우를 찾음(graay, graaay)
      • {min,max} 최소 그리고 최대
        • /gra{2,3}y/gm : a가 최소 2개, 최대 3개까지 나타나는 경우를 찾음(graay, graaay)

3. 경계

    • \b 단어 경계
      • /\bYa/gm : 단어 Ya중에서 앞에서 쓰이는 Ya만 찾음
      • /Ya\b /gm : 단어 Ya 중에서 뒤에서 쓰이는 Ya만 찾음
    • \B 단어 경계가 아님
      • /Ya\B/gm : 단어 Ya중에서 뒤에서 쓰이지 않는 Ya만 찾음
    • ^ 문장의 시작
      • /^Ya/gm : 문장에서 시작하는 Ya를 선택함
    • $ 문장의 끝
      • /Ya$/gm : 문장에 끝에 나오는 Ya를 선택함
      • global과 multiline의 차이점: 글로벌은 문장 기준이 처음부터 끝까지 이고 multiline은 줄이 기준이기 때문에 문장 끝에 나오는 Ya를 검색했을 경우 글로벌은 맨 마지막만 본다.
      • 여러줄에서 검사를 하고 싶을 때에는 m 옵셥을 키고 검사하는게 좋다

4.  문자, 숫자

  • \ 특수 문자가 아닌 문자
    • 정규 표현식에서 특별한 의미를 갖는 문자를 정말 찾고 싶다면(예를 들어 . 이나 ? 를 진짜 찾고 싶다면 \를 사용해야 한다.)
      • /\ ./gm : . 을 찾고 싶을 때
  • . 어떤 글자(줄바꿈 문자 제외)
    • /./gm  : 줄바꿈 문자를 제외하고 모든 문자를 찾음

 

  • \ d    digit 숫자
    • /\ d/gm: 숫자를 전부 찾을 수 있음
  • \D     digit 숫자 아님
    • /\ D/gm: 숫자가 아닌 모든 것을 찾을 수 있음
  • \w      문자
  • \W     문자 아님
  • \s       공백(space)
  • \S       공백(space)아님

자바스크립트에서 활용하는법

const regex = /(?:https?:\/\/)?(?:www\.)?youtube\/([a-zA-Z0-9-]{11})/;

const url = 'https://www.youtu.be/-ZClicWm0zM';

url.match(regex);

이렇게 정규표현식과 url을 매치시키면 url.match(regex)의 결과값이 배열로 리턴이 되는데 배열의 첫번째 원소는 매칭되는 전체 문자열이 들어가 있고 배열의 두번째 원소에는 매칭되는 그룹의 데이터가 들어있는 것을 볼 수가 있다.

 

const result = url.match(regex); //뭔가 활용을 하고 싶다면 이렇게 할당을 해준다.

result[1]; // result[1] = -ZClicWm0zM

유용한 사이트

 

정규표현식 정리(엘리) https://github.com/dream-ellie/regex

연습할 수 있는 사이트 https://regexr.com/5mhou

정규표현식 라이브러리 https://regex101.com/library?filterFlavors=javascript

728x90
반응형