코딩을 쉽게 해보자

[Deep Dive] 31장 - RegExp 본문

JavaScript

[Deep Dive] 31장 - RegExp

꿀단지코딩 2022. 12. 24. 12:33

1. 정규 표현식이란?

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

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

패턴 매칭 기능이란 특정 패턴과 일치하는 문자열을 검색하거나 추출 또는 치환할 수 있는 기능을 말한다.

 

2. 정규 표현식의 생성

정규 표현식 리터럴과

RegExp 생성자 함수를 사용할 수 있다.

 

일반적인 방법은 정규 표현식 리터럴 사용

정규 표현식 리터럴은 패턴과 플래그로 구성된다.

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

// 패턴: is
// 플래그: i => 대소문자를 구별하지 않고 검색한다.
const regexp = /is/i;

// test 메서드는 target 문자열에 대해 정규 표현식 regexp의 패턴을 검색하여 매칭 결과를
// 불리언 값으로 반환한다.
regexp.test(target); // true

 

RegExp 생성자 함수 사용

/**
 * pattern: 정규 표현식의 패턴
 * flags: 정규 표현식의 플래그(g, i, m, u, y)
 */

new RegExp(pattern[, flags]);

const target = 'IS this all there is';
const regexp = new RegExp(/is/i);
regex.test(target); // true;

3. RegExp 메서드

3-1. RegExp.prototype.exec

정규 표현식의 패턴을 검색해 매칭 결과를 배열로 반환

결과가 없는 경우 null 반환

모든 패턴을 검색하는 g 플래그를 지정해도 첫 번째 매칭결과만 반환

 

3-2. RegExp.prototype.test

test 메서드는 인수로 전달받은 문자열에 대해 정규 표현식의 패턴을 검색하여 매칭 결과를 불리언 값으로 반환

 

3-3. String.prototype.match

String 표준 빌트인 객체가 제공하는 match 메서드는 대상 문자열과

인수로 전달받은 정규 표현식과의 매칭 결과를 배열로 반환

String.prototype.match 메서드는 g 플래그가 지정되면 모든 매칭 결과를 배열로 반환한다.

const target = 'Is this all there is?';
const regExp = /is/;
target.match(regExp);
// ["is", index: 5, input: "Is this all there is?", groups: undefined]

const target2 = 'Is this all there is?';
const regExp2 = /is/;
target2.match(regExp2);
// ["is", "is"]

 

4. 플래그

패턴과 함께 정규 표현식을 구성하는 플래그는

정규 표현식의 검색 방식을 설정하기 위해 사용한다.

플래그는 총 6개 있다.

 

그 중 중요한 3개의 플래그는

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

순서와 상관없이 하나 이상의 플래그를 동시에 설정 O

플래그 X => 대소문자를 구별해 패턴 검색

               => 1개 이상 존재해도 첫 번째 매칭한 대상만 검색하고 종료

 

5. 패턴

패턴을 표현하는 몇 가지 방법

5-1. 문자열 검색

5-2. 임의의 문자열 검색

5-3. 반복 검색

5-4.OR 검색

'JavaScript' 카테고리의 다른 글

[Deep Dive] 33장 - 7번째 데이터 타입 Symbol  (0) 2022.12.28
[Deep Dive] 32장 - String  (0) 2022.12.25
[Deep Dive] 30장 - Date  (0) 2022.12.24
[Deep Dive] 29장 - Math  (0) 2022.12.22
[Deep Dive] 28장 - Number  (0) 2022.12.22