본문 바로가기
Note/JavaScript

RegExp

by sosomaneya 2024. 3. 20.
728x90

정규 표현식

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

정규 표현식 생성

  • 형태 : /regexp/i
    • / ... / : 시작/종료 기호
    • regexp : 패턴
    • i : 플래그

예시)

const target = 'Youll never walk alone';

const regexp = /never/i

regexp.test(target); // true

정규 표현식 생성자 함수

  • 형태 : new RegExp(pattern[, flags])
    • 플래그 종류 : g, i, m, u, y
  • 사용 : 정규 표현식 생성자 함수를 사용하여 동적으로 RegExp 객체를 생성할 수 있다.

예시)

const count = (str, char) => (str.match(new RegExp(char, 'gi')) ?? []).length;

count('Is this all there is?', 'is'); // 3
count('Is this all there is?', 'xx'); // 0

RegExp 메서드

RegExp.prototype.exec

  • 형태 : 정규표현식 객체.exec(인수)
  • 특징 : 정규표현식 객체를 전달받은 인수를 기준으로 검색해서 매칭 결과를 배열로 반환한다.

RegExp.prototype.test

  • 형태 : 정규표현식 객체.test(인수)
  • 특징 : 정규 표현식 객체를 전달받은 인수를 기준으로 검색하여 매칭 결과를 true 혹은 false로 반환한다.

String.prototype.match

  • 형태 : 문자열객체.match(정규표현식 객체)
  • 특징 : 문자열 객체를 전달받은 정규표현식 객체를 기준으로 매칭하여 결과를 배열로 반환한다.


플래그

: 정규 표현식의 검색 방식을 설정하기 위하여 플래그를 사용한다. 플래그는 하나 이상을 동시에 설정할 수도 있다.

  • i (ignore case) : 대소문자를 구별하지 않고 패턴을 검색한다.
  • g (global) : 대상 문자열 내에서 패턴과 일치하는 모든 문자열을 전역 검색한다.
  • m (multi line) : 문자열의 행이 바뀌더라도 패턴 검색을 계속한다.

패턴

: 플래그는 검색 방식을 설정하기 위함이고, 패턴은 검색할 문자열의 일정한 규칙을 표현하기 위함이다.

  • 지정된 문자열 검색 : /검색할 문자열/플래그
  • 임의의 문자열 검색 : / ... /플래그
  • 반복 검색 : /검색할 문자열{최소 반복수,최대 반복수}/플래그
    단, 최소 반복수와 최대 반복수 사이에는 , 외에 공백은 포함되어 있으면 안된다.
  • OR 검색 : /문자열1|문자열2/플래그
  • NOT 검색 : /[^문자열]/플래그 : 검색할 문자열 내에 NOT을 의미하는 ^을 붙인다.
  • 시작 위치로 검색 : /^문자열/ : 검색할 문자열 앞에 ^를 붙인다.
  • 마지막 위치로 검색 : /문자열$/ : $는 마지막을 의미한다.

※ 문자열 대신 사용하는 표현

  • \d : [0-9]와 같으며 숫자를 의미한다.
  • \D : \d와 반대되는 의미를 가지며, 숫자 외에 다른 문자를 의미한다.
  • \w : [A-Za-z0-9_]와 같으며 알파벳, 숫자, 언더스코어를 의미한다
  • \W : \w와 반대되는 의미를 가지며, 알파벳, 숫자, 언더스코어 외에 다른 문자를 의미한다.
  • \s : [\t\r\n\v\f]와 같으며 여러 공백 문자들을 의미한다.

주요 정규표현식

특정 단어로 시작하는지 검사

예시)

const url = 'https://example.com';

// 방법1
/^https?:\/\//.test(url); // true

// 방법2
/^(http|https):\/\//.test(url); // true

§ 방법 1

  • ^ : 문자열의 시작
  • http : http가 포함되어 있는지 확인을 위한 패턴 추가
  • s? : http에 문자 s가 붙어있던, 붙어있지 않던 매치가 되도록 함
  • \/ : 그냥 /을 사용했을 때 정규 표현식을 닫는 의미로 이해할 수 있기 때문에 앞에 기호의 표현인 \를 붙여줌

숫자로 이루어진 문자열인지 검사

예시)

const target = '12345';

/^\d+$/.test(target); // true
  • ^ : 문자열의 시작
  • \d+ : \d 는 숫자를 의미하고, +는 이러한 숫자 패턴이 최소 한 번 이상 반복되는지
  • $ : 문자열의 마지막

특수문자 포함 여부 검사

예시)

const target = 'abc#123';

(/[\{\}\[\]\/?.,;:!\)*~`!^\-_+<>@\#$%&\\\=\(\'\")]/gi).test(target);

괄호나 - 같은 기호들은 정규 표현식에 사용되어 혼란을 줄 수 있기 때문에 앞에 \를 사용하여 구분할 수 있게 한다,

반응형

'Note > JavaScript' 카테고리의 다른 글

Symbol  (0) 2024.03.21
String  (0) 2024.03.21
Date  (0) 2024.03.20
Math  (0) 2024.03.20
Number  (0) 2024.03.20