정규 표현식 정리

woolee의 기록보관소·2022년 11월 1일
0

알고리즘 문제풀이

목록 보기
32/178

정규표현식 공부 : https://curryyou.tistory.com/234

정규표현식 사용법

정규표현식 형식

/패턴/플래그
슬래시(/) 사이에는 매칭시킬 '패턴'
슬래시(/) 다음에는 옵션 설정하는 '플래그'

정규표현식 매칭 패턴(문자, 숫자, 기호 등)

{ 패턴 : 의미 }

  1. { a-zA-Z : 영어알파벳(-으로 범위 지정) }
  2. { ㄱ-ㅎ가-힣 : 한글 문자(-으로 범위 지정) }
  3. { 0-9 : 숫자(-으로 범위 지정) }
  4. { . : 모든 문자열(숫자, 한글, 영어, 특수기호, 공백 모두. 단, 줄바꿈X) }
  5. { \d : 숫자 }
  6. { \D : 숫자가 아닌 것 }
  7. { \w : 영어 알파벳, 숫자, 언더스코어(_) }
  8. { \W : /w 가 아닌 것 }
  9. { \s : space 공백 }
  10. { \S : space 공백이 아닌 것 }
  11. { \특수기호 : 특수기호 }

정규표현식 검색 패턴

아래 패턴들을 이용하면, AND, OR, StartWith, EndWith 등의 다양한 조합을 만들 수 있다.

{ 기호 : 의미 }

  1. { | : OR }
  2. { [ ] : 괄호안의 문자들 중 하나 }
  3. { [^문자] : 괄호안의 문자를 제외한 것 }
  4. { ^문자열 : 특정 문자열로 시작(괄호 없음 주의!) }
  5. { 문자열$ : 특정 문자열로 끝남 }
  6. { () : 그룹 검색 및 분류(match메서드에서 그룹별로 묶어줌) }
  7. { (?: 패턴) : 그룹 검색(분류X) }
  8. { \b : 단어의 처음/끝 }
  9. { \B : 단어의 처음/끝이 아님 }

정규표현식 갯수(수량) 패턴

특정 패턴이 몇번 반복되는지도 필터링 가능합니다.

{ 기호 : 의미 }

  1. { ? : 최대 한번(없음 || 한개) }
  2. { * : 없거나 있거나 (없음 || 있음): 여러개 포함 }
  3. { + : 최소 한개(한개 || 여러개) }
  4. { {n} : n개 }
  5. { {Min,} : 최소 Min개 이상 }
  6. { {Min, Max} : 최소 Min개 이상, 최대 Max개 이하 }

정규표현식 플래그

플래그는 동시에 여러개 사용할 수도 있습니다. 예) gi, gm 등

{ 플래그 : 의미 }

  1. { g : Global == 모든 문자 검색(안 쓰면 매칭되는 첫 문자만 검색) }
  2. { i : Ignore Case == 대소문자 구분 안함 }
  3. { m : Multi line == 여러 행의 문자열에 대해 검색 }
  • 이외에 Singleline, Unicode, Sticky 옵션도 있는데, 잘 쓰진 않는듯 한다.

정규표현식 주요 메서드

자바스크립트 코드 상에서는 아래 메서드를 통해 패턴을 검사하고, .매칭되는 문자열을 추출, 변환합니다.

{ 메서드, 의미 }

  1. { ("문자열").match(/정규표현식/플래그) : "문자열"에서 "정규표현식"에 매칭되는 항목들을 배열로 반환 }
  2. { ("문자열").replace(/정규표현식/, "대체문자열") : "정규표현식"에 매칭되는 항목을 "대체문자열"로 변환 }
  3. { ("문자열").split(정규표현식) : "문자열"을 "정규표현식"에 매칭되는 항목으로 쪼개어 배열로 반환 }
  4. { (정규표현식).test("문자열") : "문자열"이 "정규표현식"과 매칭되면 true, 아니면 false반환 }
  5. { (정규표현식).exec("문자열") : match메서드와 유사(단, 무조건 첫번째 매칭 결과만 반환) }

사용 사례

숫자, 공백, 특수문자 등 제외한 알파벳만

문자열에서 해당하는 문자열 전부 탐색하려면, replaceAll을 사용하면 될텐데, 그냥 /g를 사용하면 편하다.

^의 경우, [ ] 안에서는 "제외"를 의미하고 밖에서는 "첫 문자"를 의미한다.

let regExp = /[^a-zA-Z]/g;

str1 = str1 .replace(regExp, '');

for (let i=0; i<str1.length; i++) {
  if (str1.match(regExp) {
  	// 알파벳 아닌 부분 체크     
  }
}

숫자와 연산 구분

[]로 감싸져 있으므로 \뒤에 오는 특수문자들 중 하나

let expression = "100-200*300-500+20";
const regExp = /([\*+-])/g;
const splitted = expression.split(regExp);
console.log(splitted);
// [ '100', '-', '200', '*', '300', '-', '500', '+', '20' ]

replaceAll 처럼 사용하기

let expression1, expression2 = '';
let expression = "100@200@300@500@20";
expression1 = expression.replace('@', ' ');
expression2 = expression.replace(/@/gi, ' ');
console.log(expression1, expression2);

단어와 공백

정규표현식 /\s문자열\s|\s/ : (공백문자열공백) 또는 (공백)
=> \s가 공백을 의미하고, /and/가 and 문자열을 의미한다.

예제

\d : 숫자 [0~9]
\d{number} : {} 안에 있는 건 숫자의 개수를 의미
?= : 전방탐색 = 뒤에 오는 문자 전까지를 의미함.

function hide_numbers(s) {
  return s.replace(/\d(?=\d{4})/g, "*");
}

console.log(hide_numbers("027778888"));

참고

자주 사용하는 정규 표현식 (Regular Expression) 정리
정규표현식(Regular Expression) 기초/기본 쉽고 상세한 사용 방법 정리(샘플 예제 코드)
Javascript 와 RegExp 정규 표현식

profile
https://medium.com/@wooleejaan

0개의 댓글