정규표현식

2022. 11. 11. 17:26프로그래밍/JavaScript

    목차

정규표현식의 역할

  • 문자 검색
  • 문자 대체
  • 문자 추출

정규표현식 테스트 사이트

https://regexr.com/


정규식 생성 방식

생성자 함수 방식

const regexp1 = new RegExp("[a-z]");
const regexp2 = new RegExp("[a-z]", "gi");

 

리터럴 방식

const regexp1 = /[a-z]/;
const regexp2 = /[a-z]/gi;

자바스크립트 메서드

exec

정규식.exec(문자열)

일치하는 하나의 정보를 배열 데이터로 반환함

 

test

정규식.test(문자열)

일치 여부를 true, false 로 반환함

 

match

문자열.match(정규식)

일치하는 문자열을 배열 데이터로 반환함

 

search

문자열.search(정규식)

일치하는 문자열의 인덱스를 반환함

 

replace

문자열.replace(정규식, 대체문자)

일치하는 문자열을 대체문자로 대체함

대체된 문자열을 반환함

 

split

문자열.split(정규식)

일치하는 문자열을 구분자로 분할하여 배열로 반환함

 

toString

생성자_정규식.toString()

생성자 함수 방식의 정규식을 리터럴 방식의 문자열로 반환함


플래그

g

  • 모든 문자를 일치시킴 (global)
  • g 플래그가 없으면 최초의 하나의 문자만 일치시킴

 

i

  • 영어 대소문자를 구분하지 않고 일치시킴
  • insensitive, ignore case

 

m

  • 줄바꿈된 모든 줄에서 일치시킴
  • multi line

 

u

  • 유니코드를 일치시킴
  • u 플래그가 없으면 유니코드를 일치시킬 수 없음
  • unicode

 

y

  • lastIndex 속성으로 지정된 인덱스에서만 1회 일치
  • sticky

정규식 패턴 (표현식)

정규식 패턴 설명
^ 줄의 시작에서 일치
$ 줄의 끝에서 일치
. 임의의 한 문자와 일치
a|b a 또는 b와 일치
인덱스가 작은 것을 우선적으로 반환함
* 0회 이상 연속으로 반복되는 문자
가능한 많이 일치
=== {0,}
*? 0회 이상 연속으로 반복되는 문자
가능한 적게 일치
=== {0} 
+ 1회 이상 연속으로 반복되는 문자
가능한 많이 일치
=== {1,}
+? 1회 이상 연속으로 반복되는 문자
가능한 적게 일치
=== {1}
? 없거나 1회
가능한 많이 일치
?? 없거나 1회
가능한 적게 일치
{3} 3개 연속 일치
{3,} 3개 이상 연속 일치
{3,5} 3개 이상 5개 이하 연속 일치 (3-5개)
{3,5}? 3개 이상 5개 이하 연속 중
가능한 적은 3개 연속 일치
=== {3}
[abc] a 또는 b 또는 c 와 일치
[a-z] 영어 소문자
[A-Z] 영어 대문자
[0-9] 숫자
[가-힣] 한글
[2-7] 2부터 7 사이의 문자 구간에 일치 (2, 3, 4, 5, 6, 7)
[b-f] b부터 f 사이의 문자 구간에 일치 (b, c, d, e, f)
[다-바] 다부터 바 사이의 문자 구간에 일치 (다, 라, 마, 바)
[^abc] a 또는 b 또는 c 가 아닌 나머지 문자에 일치
부정
\ 이스케이프 문자
\b 영문 대소문자 + 숫자 + _ 가 아닌 나머지 문자에 일치하는 경계
\B 영문 대소문자 + 숫자 + _ 에 일치하는 경계
\d 숫자
\D 숫자가 아닌 문자
\s 공백
\S 공백이 아닌 문자
\w 영문 대소문자 + 숫자 + _ 에 일치
\W 영문 대소문자 + 숫자 + _ 가 아닌 나머지 문자에 일치
(?=) 앞쪽 일치
(?<=) 뒤쪽 일치

 

let str = 
`https://....
http://....`;

str.match(/https?/g); // ["https", "http"]
  • 물음표가 붙어있는 앞의 단어 s는 있을 수도 있고 없을 수도 있음

 

let str = `abbcccdddd`;

str.match(/d{2}/g); // ["dd", "dd"]

str.match(/d{2,}/g); // ["dddd"]
  • d가 2번 연속으로 일치하는 것은 두개 ["dd", "dd"]
  • d가 2번 이상 연속으로 일치하는 것은 하나 ["dddd"]

 

let str =
`010-1234-5678
abcdefg@gmail.com
The quick brown fox jumps over the lazy dog.`;

str.match(/\b\w{2,3}\b/g); // ["010", "com", "The", "fox", "the", "dog"]
  • \b : 숫자/알파벳이 아닌 경계
  • \w{2,3} : 숫자/알파벳이 2개 이상, 3개 이하인 내용

 

let str =
`https://www.frozen.com/
The quick brown fox jumps over the lazy dog.`;

str.match(/\bf\w{1,}\b/g); // ["frozen", "fox"]
  • f로 시작하는 단어 검색

 

let str =
`abcdef@gamil.com
lalalala@naver.com
`;

str.match(/.{1,}(?=@)/g); // ["abcdef", "lalalala"]
str.match(/(?<=@).{1,}/g); // ["gmail.com", "naver.com"]
  • 한 개 이상의 문자 / @ 기호를 기준으로 앞쪽 일치
  • @ 기호를 기준으로 뒷쪽 일치 / 한 개 이상의 문자