Language/Javascript

[Javascript] RegExp 정규표현식

i-m-okay 2024. 7. 9. 13:05

너무 편리한데 패턴을 자꾸 까먹어서 정리해보았다.

Regular Expression

일정한 패턴을 가진 문자열의 집합을 표현하기 위해 사용하는 형식 언어

문자열을 대상으로 패턴 매칭 기능을 제공

정규 표현식 생성

flag

flag meaning
g 전역탐색 (g가 없을 경우엔 첫번째 패턴까지만 검색함)
i 대소문자 구분X
m 여러줄에 걸쳐 탐색
u 패턴을 유니코드 포인트의 시퀀스로 간주
y 대상문자열의 현재 위치에서의 탐색 시작

패턴

pattern meaning
A{1,2} A가 최소 1번, 최대 2번 반복
A{2} A가 2번 반복
A{2,} A가 최소 2번 반복
A+ A가 최소 한번 반복
A?B A가 최대한번 반복되고 B가 이어짐
A B
[AB]+ A 또는 B가 1번 이상 반복
[A-Za-z]+ A-Z 또는 a-z(알파벳) 가 1번 이상 반복
[0-9]+ [\d]+ 숫자가 한번 이상 반복
[\D]+ 숫자가 아닌 문자가 한번 이상 반복
[\w,]+ 알파벳, 숫자, 언더스코어, ' , ' 가 한번 이상
[\W]+ 알파벳,숫자,언더스코어 아닌 문자 하나 이상
[^0-9]+ 0-9가 아닌 문자 하나 이상
^https https로 시작하는지
com$ com으로 끝나는지
^[\s]+ 여러가지 공백문자([\t\r\n\v\f]를 의미)로 시작하는지
[0-9a-zA-Z]* 숫자 또는 알파벳이 0번 이상

메서드

RegExp.prototype.exec : 매칭 결과를 배열로 반환

const target = 'Is this all there is?';
const regExp = /is/;

regExp.exec(target);

// expected
// ["is", index:5, input:"Is this all there is?", groups:undefined]
  • 매칭 결과가 없는 경우 null
  • g 플래그를 지정해도 첫번째 매칭 결과만 반환

RegExp.prototype.test : 매칭 결과를 불리언으로 반환

const target = 'Is this all there is?';
const regExp = /is/;

regExp.test(target);

// expected
// true

String.prototype.match : 매칭 결과를 배열로 반환

const target = 'Is this all there is?';
const regExp = /is/g;

target.match(regExp);

// expected
// ["is", "is"]
  • exec와 다르게 g플래그를 붙이면 전체 문자열을 탐색

String.prototype.replace : 정규표현식 패턴의 문자를 대체

const target = 'abc#123';
// 대소문자 구분없이 숫자 또는 알파벳이 아닌 문자(특수문자)으로 시작
const regExp = /[^0-9A-Za-z]/gi; 

target.replace(regExp, '');

// expected
// abc123

참고 : Javascript deep dive 31장