정규 표현식, Regular Expression

문자열에서 특정 문자 조합을 찾기 위한 패턴

자바스크립트에서는 정규 표현식도 객체

 

 

 

정규 표현식 작성 방법

정규 표현식 리터럴

     슬래시('/')로 패턴을 감싸서 작성

     스크립트를 불러 올 때 컴파일 되므로, 바뀔 일이 없는 패턴의 경우에 사용

const re = /ab+c/

 

 

RegExp 객체의 생성자 호출

     생성자 함수를 사용하면 정규 표현식이 런타임에 컴파일 됨

     바뀔 수 있는 패턴이나 사용자 입력과 같이 외부 출처에서 가져오는 패턴의 경우에 사용

const re = new RegExp('ab+c')

 

 

 

정규 표현식 패턴

단순 패턴

문자열을 있는 그대로 탐색할 때 사용

예를 들어, /abc/ 패턴은 문자열에서 정확한 순서로 "abc" 라는 문자의 조합이 나타나는 부분과 일치

 

 

특수 문자

직접적인 일치 이상의 탐색이 필요할 때 사용

예를 들어, /ab*c/ 패턴에서 b*는 b의 0번 이상 반복을 의미
이 패턴을 문자열 "cbbabbbbcdebc"에 대해 사용하면, 일치하는 부분 문자열은 "abbbbc"

 

 어서션

     줄이나 단어의 시작과 끝을 나타내는 경계

     일치가 가능한 방법을 나타내는 패턴(전방탐색, 후방탐색, 조건 표현식 등) 포함

 

 문자 클래스

     글자와 숫자처럼 다른 유형의 문자를 구분

 

 그룹과 범위

     표현 문자의 그룹과 범위를 나타냄

 

 수량자

     일치할 문자나 표현이 반복되어야 할 횟수를 나타냄

 

 유니코드 속성 이스케이프

     대/소문자, 수학 기호, 문장 부호처럼, 유니코드 문자 속성에 따라 문자를 구분

 

 

이스케이핑

특수문자를 있는 그대로 탐색해야 하는 경우, 특수 문자 앞에 역슬래시('\')를 배치

예를 들어, "a*b"와 일치해야 하면 /a\*b/ 를 사용
역슬래시가 별표('*')를 이스케이프해서, 특수 문자가 아닌 문자 리터럴로 취급

 

     슬래시(/)와 일치해야 하는 경우에도 이스케이프

     리터럴 역슬래시(\)에 일치하려면 역슬래시를 이스케이프

 

RegExp 생성자와 문자열 리터럴을 사용하는 경우

     역슬래시가 문자열 리터럴의 이스케이프로도 작동

     /a\*b/ 패턴을 생성하려면 new RegExp("a\\*b")가 되어야 함

 

 

괄호 사용

괄호로 감싼 부분과 일치하는 부분 문자열을 기억하고 나중에 다시 사용 가능

 

 

 

 

자바스크립트에서 정규 표현식 사용

정규 표현식은 RegExp의 메서드 test()와 exec(), String의 메서드 match(), replace(), search(), split()에서 사용 가능

 

메서드 설명
exec() 문자열에서 일치하는 부분을 탐색합니다. 일치 정보를 나타내는 배열, 또는 일치가 없는 경우 null을 반환
test() 문자열에 일치하는 부분이 있는지 확인하고, true 또는 false를 반환
match() 캡처 그룹을 포함해서 모든 일치를 담은 배열을 반환하고, 일치가 없으면 null을 반환
matchAll()
(en-US)
캡처 그룹을 포함해서 모든 일치를 담은 반복기를 반환
search() 문자열에서 일치하는 부분을 탐색하여 일치하는 부분의 인덱스를 반환하거나, 일치가 없는 경우 -1을 반환
replace() 문자열에서 일치하는 부분을 탐색하고, 그 부분을 대체 문자열로 바꿈
replaceAll()
(en-US)
문자열에서 일치하는 부분을 모두 탐색하고, 모두 대체 문자열로 바꿈
split() 정규 표현식 또는 문자열 리터럴을 사용해서 문자열을 부분 문자열의 배열로 나눔

 

 

exec() 메서드를 사용 예제

const myRe = /d(b+)d/g;
const myArray = myRe.exec('cdbbdbsbz');

 

정규 표현식 객체의 속성에 접근할 필요가 없으면 아래와 같이 짧게 작성

const myArray = /d(b+)d/g.exec('cdbbdbsbz');
 

정규 표현식을 문자열에서 만들고 싶으면 아래처럼 사용

const myRe = new RegExp('d(b+)d', 'g');
const myArray = myRe.exec('cdbbdbsbz');

 

 

 

 

플래그를 활용한 고급 탐색

정규 표현식은 전역 탐색이나 대소문자 무시와 같은 특성을 지정하는 플래그를 가질 수 있음

 

     플래그는 단독으로 사용할 수도 있고, 순서에 상관 없이 한꺼번에 지정 가능

     플래그는 정규식과 완전히 합쳐지므로 나중에 추가하거나 제거할 수 없음

 

플래그 설명
   d 부분 문자열 일치에 대해 인덱스 생성
   g 전역 탐색
   i 대소문자를 구분하지 않음
  m 여러 줄에 걸쳐 탐색
   s 개행 문자가 .과 일치
   u "unicode", 패턴을 유니코드 코드 포인트의 시퀀스로 간주
   y 접착 탐색, 대상 문자열의 현재 위치에서 탐색을 시작

 

 

플래그를 사용한 정규 표현식

const re = /pattern/flags;

 

생성자를 사용한 경우

const re = new RegExp('pattern', 'flags');

 

 

 

 

 

↓  참고 사이트 

https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Regular_Expressions

 

 

+ Recent posts