본문 바로가기
Front-End/JavaScript

31장 RegExp (모던 자바스크립트 Deep Dive)

by kk님 2023. 6. 8.

모던 자바스크립트 Deep Dive 글 목록(스터디)
https://hello-kk.tistory.com/780


● RegExp 메서드

메서드   결과 예시
RegExp.prototype.exec 1. 매칭 결과를 배열로 반환
2. 매칭 결과가 없는 경우 null 반환
※ 매칭 첫번째 결과만 반환
["패턴", index: 인덱스, input: "주어진 문장", groups:  ]
RegExp.prototype.test 1. 매칭 결과를 불리언 값으로 반환 true/false
RegExp.prototype.match 1. 매칭 결과를 배열로 반환
※ g 플래그가 지정되면, 모든 매칭 결과를 반환
["패턴", "패턴", '패턴"]

● 플래그

 

● [ ] 대괄호 : 그룹이 아님. 그 중에 하나

● \D: 숫자가 아닌 문자

 \W: 알파벳, 숫자, 언더스코어가 아닌 문자 

 NOT 검색: [^   ]    => 대괄호 안에서

 시작 위치로 검색: ^ => 대괄호 밖에서. 괄호가 없을 때도

 마지막 위치로 검색: $

 

★ 연습하기

특정 단어로 시작하는지 /^https?:\/\/
특정 단어로 나는지 /html$/  (=> html로 끝나는지)
숫자로만 이루어진 문자열인지 /^\d+$/
하나 이상의 공백으로 시작하는지 /^[\s]+/
아이디로 사용 가능한지 /^[A-Za-z0-9]{4,10}$/
메일 주소 형식에 맞는지 /^[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*\.([a-zA-Z]{2,3}$/)
핸드폰 번호 형식에 맞는지 /^\d{3}-\d{3,4}-\d{4}/
특수 문자 포함 여부 검사 /[^A-Za-z0-9]

31.1 정규 표현식이란?

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

=> 패턴 매칭 기능

단, 주석, 공백을 허용하지 않는다.

 

31.2 정규 표현식의 생성

/패턴/플래그

/regexp/i

i: 대소문자를 구분하지 않는다

const target = ' 문장 '
const regexp = new RegExp(/패턴/플래그)
const regexp = new RegExp(/패턴/,'플래그')
regexp.test(target)

31.3 RegExp 메서드

31.3.1 RegExp.prototype.exec

메서드   결과 예시
RegExp.prototype.exec 1. 매칭 결과를 배열로 반환
2. 매칭 결과가 없는 경우 null 반환
※ 매칭 첫번째 결과만 반환
["패턴", index: 인덱스, input: "주어진 문장", groups:  ]
RegExp.prototype.test 1. 매칭 결과를 불리언 값으로 반환 true/false
RegExp.prototype.match 1. 매칭 결과를 배열로 반환
※ g 플래그가 지정되면, 모든 매칭 결과를 반환
["패턴", "패턴", '패턴"]

31.4 플래그

● 옵션

순서 관계 없음

플래그 생략시: 첫번째만 반환, 대소문자 구분

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

31.5 패턴

31.5.1 문자열 검색

31.5.2 임의의 문자열 검색

. {m, n} {n, } +   ( {1, }과 같다) ?    ( {0, }과 같다)
임의 문자 한 개 패턴이 최소m번, 최대 n번 반복 패턴이 최소 n번 이상 반복 패턴이 최소 한번 이상 반복 패턴이 최대 한번 이상 반복

31.5.4 OR 검색

| : or의 의미

/A|B/ /A+|B+/ /[AB]+/ /[A-Z]+/ /[A-Za-z]+/ /[0-9]+/ /[0-9,]+/  
 'A'또는 'B' 'A'또는 'B'가 한번 이상 반복되는 문자열 'A'또는 'B'가 한번 이상 반복되는 문자열 'A'또는 'B'가 한번 이상 반복되는 문자열
범위를 '-'로 지정
'A'~'Z'또는'a'~'z'가 한 번 이상 반복되는 문자열 '0'~'9'가 한 번 이상 반복되는 문자열 '0'~'9'또는 ','가 가 한 번 이상 반복되는 문자열  
/A|B/  'A'또는 'B'
/A+|B+/ 'A'또는 'B'가 한번 이상 반복되는 문자열
/[AB]+/ 'A'또는 'B'가 한번 이상 반복되는 문자열
/[A-Z]+/ 'A'또는 'B'가 한번 이상 반복되는 문자열
범위를 '-'로 지정
/[A-Za-z]+/ 'A'~'Z'또는'a'~'z'가 한 번 이상 반복되는 문자열
/[0-9]+/ '0'~'9'가 한 번 이상 반복되는 문자열
/[0-9,]+/ '0'~'9'또는 ','가 가 한 번 이상 반복되는 문자열
/[\d,]+/ '0'~'9'또는 ','가 가 한 번 이상 반복되는 문자열
/[\D,]+/ '0'~'9'가 아닌 문자(숫자가 아닌 문자) 또는 ','가 가 한 번 이상 반복되는 문자열
/[\w,]+/ 알파벳, 숫자, 언더스코어, ','가 한 번 이상 반복되는 문자열을 전역 검색
/[\W,]+/ 알파벳, 숫자, 언더스코어가 아닌 문자 또는 ','가 한 번 이상 반복되는 문자열을 전역 검색

31.5.5 NOT 검색: [^   ]

31.5.6 시작 위치로 검색: ^

31.5.7 마지막 위치로 검색: $

/[^0-9]+/ /[^A-Za-z9-9_]+/ /^https/ $
\D \W https로 시작하는지 검색 /com$/

31.6 자주 사용하는 정규표현식

특정 단어로 시작하는지 /^https?:\/\/
특정 단어로 나는지 /html$/  (=> html로 끝나는지)
숫자로만 이루어진 문자열인지 /^\d+$/
하나 이상의 공백으로 시작하는지 /^[\s]+/
아이디로 사용 가능한지 /^[A-Za-z0-9]{4,10}$/
메일 주소 형식에 맞는지 /^[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*\.([a-zA-Z]{2,3}$/)
핸드폰 번호 형식에 맞는지 /^\d{3}-\d{3,4}-\d{4}/
특수 문자 포함 여부 검사 /[^A-Za-z0-9]

특수문자 제거

String.prototype.replace()