1. 정규표현식
정규 표현식(Regular Expression)이란?
- 특정 규칙을 가진 문자열 집합에 사용하는 형식 언어
- 유효성 검사, 검색 알고리즘, 문자열 치환 등에서 반복문 없이 효율적으로 찾고자 하는 문자를 찾을 수 있게 도와준다.
- 언어에 독립적으로 존재하며 java, oracle, js 등 다양한 언어에서 사용할 수 있다.
1.1. 정규표현식 객체 생성
- var re1 = 정규표현식;
- var re2 =new RegExp(정규표현식);
위와 같이 변수에 직접 정규표현식을 초기화하거나, new RegExp(정규표현식) 생성자를 통해 변수에 초기화할 수 있다.
2. 정규표현식 실행
실행에 앞서 사용할 세 정규표현식(regExp)
var re1 = /a/; // 문자열 a를 찾을 때
var re2 = new RegExp(/[0-9]/); // 0부터 9까지 숫자를 찾을 때
var re3 = new RegExp("[a-z]"); // a-z까지의 영문자를 찾을 때
(1) .test(문자열) : 문자열이 정규표현식에 맞는지 확인하여 boolean 값을 반환
1. 문자열에 a가 포함되어 있으면 true
console.log(re1.test('abcde')); t
console.log(re1.test('bcde')); f
2. 문자열에 숫자가 포함되어 있으면 true
console.log(re2.test('mkm123')); t
console.log(re2.test('mkm')); f
3. 문자열에 영어 소문자가 포함되어 있으면 true
console.log(re3.test('가나다Mkm123')); t
console.log(re3.test('가나다MKM123')); f
(2) .exec() : 정규표현식과 일치하는 요소 한 번만 찾아서 배열에 넣는다.
1. 문자열에 a와 일치하는 요소를 한 번만 찾아서 배열로 반환
console.log(/a/g.exec('acba'));
(3) match : exec() 함수와 동일하게 일치하는 요소를 찾지만 모두 배열에 넣음
1. 문자열에 a와 일치하는 요소를 모두 찾아서 배열로 반환
console.log('acba'.match(/a/g));
| exec() | match |
|---|
 |  |
(4) search : 문자열에서 정규표현식과 일치하는 문자의 첫 인덱스 위치
1. 문자열에서 a가 포함된 첫 인덱스 반환
console.log('sdfnaklne'.search(re1));
console - 4 출력
(5) replace(찾을 문자, 바꿀 문자) : 문자열을 일치하는 정규표현식을 바꿀 문자로 변경
- 문자열.replace(regExp, 바꿀문자)
1. 문자열에서 a를 찾아 A로 바꾸기
console.log('cabbbacca'.replace(/a/g,'A'));
console - cAbbbAccA 출력
(6) split(구분자 | 정규식) : 정규식 기준으로 문자를 구분
1. , 구분자로 분리 시 " 양파" " 마늘" 등 공백이 포함
console.log('사과, 배, 양파, 마늘'.split(","));
2. \s는 space의 약자 *은 있을 수도 있고 없을 수도 있음 = , 앞뒤로 공백이 있을 수도 없을 수도 있음
console.log('사과, 배, 양파, 마늘'.split(/\s*,\s*/));

2.1. flag 문자
- g(global) : 정규식에 대한 전역 비교를 수행하고자 할 때 사용.
g가 없으면 첫번째로 매칭되는 조건이 있는 경우 검사를 종료.
g가 있으면 모든 문자열에 대해 정규식과 매치되는 문자가 있는지 검사한다.
- m(multi-line) : 문자열이 여러 줄(\n)로 존재하는 경우 줄단위 비교를 수행한다.
- i(ignore) : 영문자 중 대소문자를 구분하지 않고 비교를 수행한다.
문자열에서 a를 찾아 형광펜 표시 (css생략)
var str = 'Javascript jQuery Ajax';
area.innerHTML = str.replace(/a/gmi, "<mark>$&</mark>");
| flag 문자 g표기 X | flag 문자 g표기 |
|---|
 |  |
2.2. anchor 문자
var str = 'Javascript\nxxxx\njQuery\nAjax';
1. j로 시작하는 문자열 표기
area.innerHTML = str.replace(/^j/gim, '<mark>$&</mark>');
2. x로 끝나는 문자열 표기
area.innerHTML = str.replace(/x$/mig, '<mark>$&</mark>');
| 1번 /^j/gim | 2번 /x$/gim |
|---|
 |  |
2.3. .(dot) : 임의의 한글자 의미
1. a랑 b 사이에 한 글자가 들어가있는지 검사
var re2 = /a.b/g;
area.innerHTML = "ab aab aaab".replace(re2, "<mark>$&</mark>");
2. in이후 두 글자로 끝나는 문자열
var re3 = /in..$/; // in이후 두 글자로 끝나는 문자열 검사
['goingo', 'goin','gointo','going'].forEach(function(str) {
console.log(re3.test(str), str);
});
3. c로시작해서 k로 끝나는 다섯글자
var re4 = /^c...k$/;
['ck','cdk','cdak','cdawk','cdawak'].forEach( str => {
console.log(re4.test(str), str);
});
2.4. []
- "한글자"를 의미하여 문자의 범위를 나타낼 때 사용
- 대괄호 안에서 ^가 사용되는 경우 앵커문자가 아닌 특정문자를 제외하고자 하는 기호로써 사용된다.
var s = "Javascript jQuery Ajax 12345";
1. a 또는 j가 포함된 문자열 표기
area.innerHTML = s.replace(/[aj]/gi, '<mark>$&</mark>');
2. a 또는 j가 아닌 문자열 표기
area.innerHTML = s.replace(/[^aj]/gi, '<mark>$&</mark>');
| 1번 | 2번 |
|---|
 |  |
2.5. 문자 클래스
- \d : (decimal) 숫자
- \w : (word) 영문자, 숫자, _(언더바)
- \s : (space) 공백문자, 탭, 개행문자
- \D : 숫자가 아닌 모든 몬주
- \W : 영문자, 숫자, _가 아닌 모든 문자
- \S : 공백문자, 탭 ,개행문자가 아닌 모든 문자
var s = "A1 B2 c3 d_4 e:5' ` ffGG6767--__--!\"@#$%^&*() 가\n나\n다\n";
1. \d
area.innerHTML = s.replace(/\d/g, '<mark>$&</mark>');
2. \w
area.innerHTML = s.replace(/\w/g, '<mark>$&</mark>');
3. \s
area.innerHTML = s.replace(/\s/g, '<mark>$&</mark>');
2.6. 그룹핑 ( | )
var s = "월요일에는 월요병, 화요일은 화가 부글부글, " + "수요일은 술이 확 땡긴다. 목요일이 목이 컥 막히고, 금요일은 금방 올거 같지 않다.";
1. 수요일 목요일 금요일을 표기
area.innerHTML = s.replace(/(수요일|목요일|금요일)/g, '<mark>$&</mark>');
2. 수 또는 목 또는 금 뒤에 요일이 오는 문자 표기
area.innerHTML = s.replace(/(수|목|금)요일/g, '<mark>$&</mark>');
3. 수목금 중 한글자 뒤 요일이 오는 문자 표기
area.innerHTML = s.replace(/[수목금]요일/g, '<mark>$&</mark>');
| console 모두 동일 |
|---|
 |