본문 바로가기

프로그래밍/JavaScript

[JavaScript 요약 정리] 16. 정규 표현식

16. 정규 표현식

1) 정규 표현식 객체

- 자바스크립트의 기본 내장 객체 중 하나

- 생성 방법

var regExp1 = new RegExp('text');

var regExp2 = /text/;


- 정규 표현식 객체의 메소드

test() : 정규 표현식과 일치하는 문자열 존재 여부 반환

exec() : 정규 표현식과 일치하는 문자열 반환


2) 정규 표현식을 사용하는 String 객체의 메소드

match(regExp): 정규 표현식과 일치하는 부분 반환

replace(regExp, replacement):  정규 표현식과 일치하는 부분 변경

search(regExp): 정규 표현식과 일치하는 부분의 위치 반환

split(regExp): 정규 표현식을 기준으로 문자열을 잘라 배열 반환


3) 대체 문자

- replace() 메소드 사용

- 대체 문자 정규 표현식 기호

$& : 일치하는 문자열

$` : 일치하는 부분의 앞부분 문자열

$' : 일치하는 부분의 뒷부분 문자열

$1, $2, $3 : 그룹

- 사용 예시

'a'.replace(/a/, '+$&+');  // a -> +a+ 변환

'abcde'.replace(/(a)(b)(c)/, '+$1=$2=$3+'); // abcde -> +a=b=c+de


4) 플래그 문자

- 비교 범위 지정

g : 전역 비교

i : 대소문자 상관없이 비교

m : 여러 줄의 검사를 수행 // 앵커 문자 사용


- 생성 예시

var regExp = /Expression/im;

var regExp = new regExp('Expression', 'im');


5) 앵커 문자

- 문자열의 앞과 뒤를 구분해주는 정규 표현식 기호

^abc : 맨 앞 문자가 abc

abc$ : 맨 뒤 문자가 abc

- 줄바꿈이 존재하는 문자열 비교시 m 플래그 문자가 지정되어있으면 각 줄당 앵커를 확인

- 예시

'Javascript\njQuery\nAjax'.replace(/^j/igm, '+$&+');

예시 결과

"+J+avascript

+j+Query

Ajax"


6) 메타 문자

- 비교 범위를 표현

. : 모든 글자

[abc] : 괄호 안의 글자

[^abc] :  괄호 안의 글자 제외

[a-z] : 알파벳 a부터 z까지

[A-Z] : 알파벳 A부터 Z까지

[0-9] : 숫자 0부터 9까지


\d : 숫자

\w : 아무 단어(숫자 포함)

\s : 공백 문자(탭, 띄어쓰기, 개행)

\D : 숫자 아님

\W : 아무 단어 아님

\S : 공백 문자 아님


- 예시

'Javascript jQuery Ajax'.replace(/[aj]/igm, '+$&'); -> "+J+av+ascript +jQuery +A+j+ax"

'910209-2001211'.replace(/\d\d\d\d\d\d\-[1234]\d\d\d\d\d\d/, '+$&+'); -> "+910209-2001211+"

'910209-2001211999'.replace(/\d\d\d\d\d\d\-[1234]\d\d\d\d\d\d/, '+$&+'); -> "+910209-2001211+999"


7) 수량 문자

a+ : a가 적어도 1개 이상

a* : a가 0개 또는 여러 개

a? : a가 0개 또는 1개

a{5} : a가 5개

a{2,5} : a가 2~5개

a{2,} : a가 2개 이상

a{,2} : a가 2개 이하


8) 선택 문자

- (abc|def) : abc 또는 def 선택 // or


9) 정규 표현식 사용 예시

- 소문자, 숫자 한정

var regExp = /([0-9]|[a-z])/g;

'java'.replace(regExp, '').length -> 0

'Java'.replace(regExp, '').length -> 1


- 한글 한정

var regExp = /([가-힣])/g;

'자바'.replace(regExp, '').length -> 0

'Java'.replace(regExp, '').length -> 4


- 이메일 패턴 한정

var regExp = /\w+@\w+\.\w+/;

'java@java.com'.replace(regExp, '').length -> 0

'자바'.replace(regExp, '').length -> 2