자바스크립트 정규표현식 총정리

세나정·2023년 4월 18일
0

JavaScript

목록 보기
3/11
post-thumbnail

정규식 구성

/regexr/i

대부분 언어의 정규식 문법은 비슷하니 하나의 정규식을 알아두면 다른 언어의 정규식을 익히는 건 매우 빠르게 학습 가능

정규식 메서드

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

정규식 플래그

정규식 플래그는 정규식을 생성할 때 고급 검색을 위한 전역 옵션을 설정할 수 있도록 지원하는 기능

  • i (Ignore Case) : 대소문자를 구별하지 않고 검색
  • g (Global) : 문자열 내의 모든 패턴을 검색
  • m (Multi Line) : 문자열의 행이 바뀌더라도 검색을 계속
  • s : .(모든 문자 정슈기)이 개행 문자 \n도 포함하도록
  • u (unicode) : 유니코드 전체를 지원
  • y (sticky) :문자 내 특정 위치에서 검색ㅇ글 진행하는 'sticky'모드를 활성화

g (전역 검색)

전역 검색 플래그가 없을 땐 최초 검색 결과 한 번만 반환하는 반면 있을 땐 모든 검색 결과를 배열로 반환

// `a`가 두 개 포함된 문자열
const str = "abcabc";

// `g` 플래그 없이는 최초에 발견된 문자만 반환
str.match(/a/); // ["a", index: 0, input: "abcabc", groups: undefined]

// `g` 플래그가 있으면 모든 결과가 배열로 반환
str.match(/a/g); // (2) ["a", "a"]

m (줄바꿈 검색)

여러 줄의 문자열에서 필터링 해야 될 때 사용
시작 앵커 (^)나 종료 앵커 ($)는 전체 문자열이 아닌 각 줄 별로 대응 되게 만들어졌기 때문에 여러줄을 검색할 땐 m 플래그를 사용 해야함

// 줄바꿈이 포함된 3줄 문자열
const str = "Hello World and\nPower Hello?\nPower Overwhelming!!";
/*
Hello World and
Power Hello?
Power Overwhelming!!
*/

// Hello 단어로 시작하는지 검사 (^ 문자는 문장 시작점을 의미)
str.match(/^Hello/); // ["Hello"]
// → 첫번째 줄은 잘 찾음

// Power 단어로 시작하는지 검사 (^ 문자는 문장 시작점을 의미)
str.match(/^Power/); // null
// → 그러나 그 다음 줄은 검색되지 아니함

// 따라서 m 플래그를 통해 개행되는 다음 줄도 검색되게 설정
str.match(/^Power/m); // ['Power']

// 세번째 줄도 검색되게 하고싶으면 g 플래그와 혼합 사용
str.match(/^Power/gm); // ['Power', 'Power']

i (대소문자 구분 없음)

정규식은 대소문자와 공백을 구분
대신 i 플래그를 통해 대소문자 구분을 하지 않을 수 있음

const str = "abcABC";

// 대소문자 a 검색
str.match(/a/gi); // (2) ["a", "A"]

정규식 특정 문자, 숫자 매칭 패턴

  • a-zA-z : 영어알파벳
  • ㄱ-ㅎ가-힣 : 한글 문자
  • 0-9 숫자
  • \d : 숫자
  • \D : 숫자가 아닌 것
  • \w : 알파벳 대소문자, 숫자, 밑줄 문자()와 일치하는 문자, [A-Za-z0-9]와 동일
  • \W : \w가 아닌 것
  • \s : 공백
  • \S : 공백이 아닌 것
  • \특수기호 : 특수기호등
  • \b : 63개 문자 (영 대소문자 52개 + 숫자 10개 + _ ) 가 아닌 나머지 문자에 일치하는 경계
  • \B : 63개 문자에 일치하는 경계

정규식 검색 기준 패턴

  • | :oR
  • [] : 괄호안에 문자들 중 하나 or처리묶음이라고 보면 됨
    /[abc]/ : "a" 또는 "b" 또는 "c" 를 포함하는
  • [^문자] : 괄호안의 문자를 제외한 것
    [^lgEn] "l" "g" "E" "N" 4개 문자를 제외
    ※ 대괄호 안에서 쓰면 제외의 뜻, 대괄호 밖에서 쓰면 시작점 뜻
  • ^문자열 : 특정 문자열로 시작 (시작점) /^www/
  • 문자열$ : 특정 문자열로 끝남 (종착점) /com$/

정규식 갯수 반복 패턴

  • ? : 없거나 or 최대 한 개만 /apple?/
  • * : 없거나 or 있거나 (여러개) /apple*/
  • + : 최소 한 개 or 여러개 /apple+/
  • *? : 없거나, 있거나 and 없거나, 최대 한 개 : 없음 {0}과 동일
  • +? : 최소 한 개, 있거나 and 없거나, 최대한개 : 한개 {1} 과 동일
  • {n} : n개
  • {Min, } : 최소 Min개 이상
  • {Min, Max} : 최소 Min개 이상, Max개 이하 {3, 5}? == {3} 과 동일

실사용예시

.replace(' ','') : 첫번째 공백 제거
.replace(/-/g,'') : - 제거
.replace(/[-]/g,'')
.replace(/,/g,'') : , 제거
.replace(/^\s+/,'') : 앞의 공백 제거
.replace(/\s+/,):뒤의공백제거.replace(/\s+\s+/,'') : 뒤의 공백 제거 .replace(/^\s+|\s+/g,'') : 앞뒤 공백 제거
.replace(/\s/g,'') : 문자열 내의 모든 공백 제거
2가지 이상사용시 .replace(/[-]|\s/gi, ''); 등으로 |(or)을 가지고 사용가능 (-,공백제거)

profile
압도적인 인풋을 넣는다면 불가능한 것은 없다. 🔥

0개의 댓글