[JS] 정규 표현식

hahaha·2021년 10월 4일
0

JavaScript

목록 보기
23/24
post-thumbnail

정규 표현식

  • 일정한 패턴을 가진 문자열의 집합을 표현하기 위해 사용하는 형식 언어
  • JS 고유 문법은 아님
  • 대부분의 프로그래밍 언어와 코드 에디터에 내장되어 있음
  • 패턴 매칭 기능 제공
    - 특정 패턴과 일치하는 문자열을 검색 / 추출 / 치환하는 기능

생성하기

정규 표현식 리터럴

  • 패턴과 플래그로 구성
/regexp/i

시작기호 / 패턴 regexp 종료기호 / 플래그 i
const target = 'Is this all there is?';

// 패턴: is
// 플래그: i (대소문자 구별하지 않고 검색)
const regexp = /is/i;

regexp.test(target);	//	 true

RegExp 생성자 함수

new RegExp(pattern[, flags])
const target = 'Is this all there is?';

// 패턴: is
// 플래그: i (대소문자 구별하지 않고 검색)
const regexp = new RegExp(/is/i);	// ES6
// const regexp = new RegExp(/is/, 'i');
// const regexp = new RegExp('is', 'i');

regexp.test(target);	//	 true

RegExp 메서드

1. RegExp.prototype.exec

  • 패턴을 검색하여 매칭 결과를 배열로 반환
    - 매칭 결과가 없는 경우, null 반환
  • 첫 번째 매칭 결과만 반환
const target = 'Is this all there is?';
const regExp = /is/;

regExp.exec(target);
// -> ["is", index: 5, input: "Is this all there is?", groups: undefined]

2. RegExp.Prototype.test

  • 패턴을 검색하여 매칭 결과를 불리언 값으로 반환

3. String.prototype.match

  • 패턴을 검색하여 매칭 결과를 배열로 반환
    - 매칭 결과가 없는 경우, null 반환
  • 모든 매칭 결과를 반환
const target = 'Is this all there is?';
const regExp = /is/;

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

플래그

  • 정규 표현식의 검색 방식 설정
  • option
    - 선택적 사용 가능
    - 하나 이상의 플래그 동시 설정 가능

i

  • ignore case
  • 대소문자 구별하지 않고 검색

g

  • global
  • 모든 문자열을 전역 검색

m

  • multi line
  • 문자열의 행이 바뀌어도 검색 계속 진행

패턴

  • 정규 표현식 문자열의 일정한 규칙 표현
  • /로 열고 닫으며, 문자열의 따옴표 생략

임의의 문자열

  • .은 임의의 문자 한 개를 의미
const target = 'Is this all there is?';
const regExp = /.../g;

target.match(regExp);	// -> ["Is ", "thi", " al", ...]

반복 검색

  • {m, n} 은 앞선 패턴이 최소 m번, 최대 n번 반복되는 문자열
  • {n} = {n, n}
  • {n,} 앞선 패턴이 최소 n번 이상 반복되는 문자열
  • + = {1,} 최소 1번 이상 반복되는 문자열
  • ? = {0,1} 최대 한 번 이상 반복되는 문자열
const target = 'A AA B BB';
const regExp = /A{1,2}/g;

target.match(regExp);	// -> ["A", "AA"]

OR 검색

  • |
const target = 'A AA B BB';
const regExp = /A|B/g;

target.match(regExp);	// -> ["A", "A", "A", "B", "B", "B"]


// 분해되지 않은 단어로 검색하기 위해서는 +를 함께 사용
const target = 'A AA B BB';
const regExp = /A+|B+/g;

target.match(regExp);	// -> ["A", "AA", "B", "BB"]
  • []내의 문자는 or로 동작
    - ex. [AB]
  • 범위를 지정하려면 []내에 -를 사용
const target = 'A AA BB ZZ Aa Bb';
const regExp = /[A-Z]/g;

target.match(regExp);	// -> ["A", "AA", "BB", "ZZ", "A", "B"]

NOT 검색

  • [] 내의 ^는 not을 의미
    - ex. [^0-9]: 숫자를 제외한 문자

시작 위치로 검색

  • [] 밖의 ^는 문자열의 시작을 으;ㅁ;

마지막 위치로 검색

  • $ 문자열의 마지막을 의미

그외

  • /d 숫자
  • /D 숫자가 아닌 문자
  • /w 알파벳, 숫자, 언더스코어 ([A-Za-z0-9_]와 동일)
  • /W 알파벳, 숫자, 언더스코어가 아닌 문자
profile
junior backend-developer 👶💻

0개의 댓글