정규표현식 (RegExp)

Lian Kim·2022년 8월 7일
0

정규 표현식(regular expression, 간단히 regexp 또는 regex) 또는 정규식은 문자열에서 특정 문자 조합을 찾기 위한 패턴이다.

예를 들면, 많은 텍스트 중에 전화번호 패턴을 찾거나 웹사이트 형태의 패턴을 찾을 때도 사용할 수 있고, 찾은 패턴을 다른 문자열로 변환할 수도 있다. 또는 사용자가 입력한 데이터가 이메일이나 패스워드와 같은 특정한 패턴에 부합하는지 유효성 검사를 할 때도 사용할 수 있다.

정규 표현식은 대부분의 프로그래밍 언어와 코드 에디터에 내장되어 있다.


/regexp/i

정규 표현식 리터럴은 위와 같이 패턴(regexp)과 플래그(i)로 구성된다.



📌 패턴

패턴은 /로 열고 닫으며 문자열의 따옴표는 생략한다.


Groups and ranges

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

  • | : 또는
  • () : 그룹
  • (?:) : 찾지만 기억하지는 않음
    : 그룹에서 시작할 때 ?와 :을 이용하면 그룹이 지정되지 않는다.
  • [] : 문자셋, 괄호 안의 어떤 문자든
    : 여러가지의 또는(‘|’)을 작성할 때 대괄호를 이용하면 해당하는 모든 문자열 집합체를 지정해줄 수 있다.
  • [^] : 부정 문자셋, 괄호 안의 어떤 문자가 아닐 때

Quantifiers

Character
?없거나 있거나 (zero or one)
*없거나 있거나 많거나 (zero or more)
+하나 또는 많이 (one or more)
{n}n번 반복
{min,}최소
{min,max}최소와 최대

  • ? : 없거나 있거나 (zero or one)
  • * : 없거나 있거나 많거나 (zero or more)
  • + : 하나 또는 많이 (one or more)
  • {n} : n번 반복
  • {min,} : 최소
  • {min,max} : 최소와 최대

Boundary-type

Character
\b단어 경계
\B단어 경계가 아님
^문장의 시작
$문장의 끝

  • \b : 단어 경계
  • \B : 단어 경계가 아님
  • ^ : 문장의 시작
  • $ : 문장의 끝


Character classes

Character
\ 특수 문자가 아닌 문자
.어떤 글자 (줄바꿈 문자 제외)
\ddigit 숫자
\Ddigit 숫자 아님
\wword 문자
\Wword 문자 아님
\sspace 공백
\Sspace 공백 아님

  • \ : 특수 문자가 아닌 문자
  • . : 어떤 글자 (줄바꿈 문자 제외, 공백은 포함)
  • \d : digit 숫자
  • \D : digit 숫자 아님
  • \w : word 문자
  • \W : word 문자 아님
  • \s : space 공백 (줄바꿈 제외)
  • \S : space 공백 아님 (줄바꿈 제외)



📌 플래그

패턴과 함께 정규 표현식을 구성하는 플래그는 정규 표현식의 검색 방식을 설정하기 위해 사용한다. 플래그는 옵션이므로 선택적으로 사용할 수 있으며, 순서와 상관없이 하나 이상의 플래그를 동시에 설정할 수도 있다.

플래그의미설명
iIgnore case대소문자를 구별하지 않고 패턴 검색
gGlobal대상 문자열 내에서 패턴과 일치하는 모든 문자열을 전역 검색
mMulti line.문자열의 행이 바뀌더라도 계속 패턴 검색

  • 대소문자를 구별하여 한 번만 검색
  • i : 대소문자를 구별하지 않고 한 번만 검색
  • g : 대소문자를 구별하여 전역 검색
  • ig : 대소문자를 구별하지 않고 전역 검색



📄 Quiz

  1. 전화번호 선택하기 (번호는 -, ., 으로 연결됨)
/\d{2,3}[- .]\d{3}[- .]\d{4}/gm

  1. 이메일 선택하기
[a-zA-Z0-9._+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9.]+

  1. 다른 형식의 같은 url에서 유튜브 ID 가져오기
(?:https?:\/\/)?(?:www\.)?youtu\.be\/([a-zA-Z0-9-]{11})
  • 필요한 부분만 ()그룹으로 남겨두고 필요없는 그룹은 (?:)




📌 자바스크립트에서 정규식 사용하기

// 퀴즈 3번 예제

const url = 'https://www.youtu.be/-ZClicWm0zM';
const regex = /(?:https?:\/\/)?(?:www\.)?youtu\.be\/([a-zA-Z0-9-]{11})/;
const result = url.match(regex);

return result[1];
// -ZClicWm0zM

📍
[JS] 정규 표현식 사용하기
https://velog.io/@liankim/JS-RegExp




📍 유용한 사이트

  • 정규표현식 연습 사이트
    https://regexr.com/
    : 익스프레션 창에서 원하는 정규표현식을 작성해주면 즉각적으로 텍스트에서 해당하는 것을 확인할 수 있다. 하단의 Tools-Explain을 누르면 설명을 볼 수 있어서 어렵고 복잡한 식을 이해하기에 좋다.


참고 자료

MDN https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
youtube 드림코딩 https://www.youtube.com/watch?v=t3M6toIflyQ
이웅모, 『모던 자바스크립트 Deep Dive』, 위키북스

0개의 댓글