정규 표현식

2025. 7. 5. 14:51카테고리 없음

정규 표현식이란?

  • 일정한 패턴을 가진 문자열의 집합을 표현하기 위해 사용하는 형식 언어
  • 자바스크립트는 펄(Perl)의 정규 표현식 문법을 ES3부터 도입
  • 문자열을 대상으로 패턴 매칭 기능을 제공

 

정규 표현식의 생성

 1. 정규 표현 식 리터럴

 

2. RegExp 생성자 함수

new RegExp(pattern[, flag])

 

플래그

플래그 의미 설명
i ignore case 대소문자 구별하지 않고 패턴을 검색한다.
g global 대산 문자열 내에서 패턴과 일치하는 모든 문자열을 전역 검색한다.
m multi line 문자열의 행이 바뀌더라도 패턴 검색을 계속한다.

 

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

// target 문자열에서 is 문자열을 대소문자를 구별하여 한 번만 검색한다.
target.match(/is/);
// -> ["is", index: 5, input: "Is this all there is?", groups: undefined]

// target 문자열에서 is 문자열을 대소문자를 구별하지 않고 한 번만 검색한다.
target.match(/is/i);
// -> ["Is", index: 0, input: "Is this all there is?", groups: undefined]

// target 문자열에서 is 문자열을 대소문자를 구별하여 전역 검색한다.
target.match(/is/g);
// -> ["is", "is"]

// target 문자열에서 is 문자열을 대소문자를 구별하지 않고 전역 검색한다.
target.match(/is/ig);
// -> ["Is", "is", "is"]

 

const target = "오늘 날씨는 맑고, 내일 날씨도 맑을 예정이다.";

// "날씨"라는 단어를 한 번만 검색
console.log(target.match(/날씨/));
//  ["날씨"]

// "날씨"를 전역 검색 (모든 등장 위치 찾기)
console.log(target.match(/날씨/g));
//  ["날씨", "날씨"]

// "맑"이라는 글자가 들어간 단어를 전역 검색
console.log(target.match(/맑/g));
//  ["맑", "맑"]

// "내일"이라는 단어를 검색
console.log(target.match(/내일/));
//  ["내일"]

// 없는 단어를 검색하면 null
console.log(target.match(/비/));
//   null

 

 

임의의 문자열 검색

const target = "오늘 날씨는 맑고, 내일 날씨도 맑을 예정이다.";

// 임의의 3자리 문자열을 전역 검색(점의 갯수에 따라 문자열의 갯수가 바뀐다.)
console.log(target.match(/.../g));
// ['오늘 ', '날씨는',' 맑고', ', 내','일 날', '씨도 ', '맑을 ', '예정이']

 

 

반복 검색

const target = "가 가가 나 나나 가나다 가가가";

 

{m,n} 은 최소 m번 최대 n 번 반복되는 문자열을 의미한다.

// '가'가 최소 1번, 최대 2번 반복되는 문자열을 전역 검색한다.
const regExp = /가{1,2}/g;

console.log(target.match(regExp));
// [ '가', '가가', '가', '가가', '가' ]

 

{n} 은 패턴이 n 번 반복되는 문자열을 의미한다. {n}과 {n,n}은 동일

const regExp = /가{2}/g;

console.log(target.match(regExp)); //  ["가가", "가가"]

 

{n,} 은 패턴이 최소 n번 이상 반복되는 문자열을 의미한다.

const regExp = /가{2,}/g;

console.log(target.match(regExp)); //  ["가가", "가가가"]

 

+는 패턴이 최소 한번 이상 반복되는 문자열을 의미한다. +는 {1,} 와 같다

const regExp = /가+/g;

console.log(target.match(regExp)); //  ["가", "가가", "가", "가", "가가가"]

 

?는 있어도 되고 없어도 되는 문자열을 의미한다. {0,1}과 동일하게 동작한다. 앞선문자열이 없거나 1번이상 포함되는 문자열을 의미한다.

const regExp = /가나다?라/g;

console.log(target.match(regExp)); //  ["가나라", "가나다라"]

 

OR 검색

const target = '가 가나다 나 다 가나다라 가나다 라';

 

| 는 or 의 의미이다. / 가 | 나 /  는 '가' 또는 '나' 를 의미 한다.

const regExp = /가|나/g;

target.match(regExp); // -> ["가", "가", "나", "나", "가", "나", "가", "가", "나", "나"]

 

'가' 또는 '나'가 한 번 이상 반복된 문자열을 전역 검색한다.

[ ] 내의 문자는  or 로 동작한다.

const regExp = /[가나]+/g;

target.match(regExp); // -> ["가", "가나", "나", "가나", "가나", "가나", "나"]