[240420] 31장 RegExp
정규 표현식이란?
- 일정한 패턴을 가진 문자열의 집합을 표현하기 위해 사용하는 형식 언어
- ES3 부터 도입
- 문자열 대상으로 패턴 매칭 기능 제공
정규 표현식의 생성
- 일반적으로 정규 표현식 리터럴 사용
- 시작, 종료 기호 / 패턴 플래그로 구성
new RegExp(pattern[,flags]);
RegExp 메서드
1. RegExp.prototype.exec
- 인수로 전달받은 문자열에 대해 정규 표현식의 패턴을 검색하여 매칭 결과를 배열로 반환
- 매칭 결과가 없을 경우 null 반환
2. RegExp.prototype.test
- 인수로 전달받은 문자열에 대해 정규 표현식의 패턴을 검색하여 매칭 결과를 불리언 값으로 반환
3. String.prototype.match
- 인수로 전달 받은 정규표현식과의 매칭 결과를 반환
- exec는 g 플래그를 지정해도 첫 번째 매칭 결과만 반환하는데 match 는 모든 결과를 배열로 반환
플래그
| i | ignore case | 대소문자를 구별하지 않고 패턴을 검색 | | — | — | — | | g | Global | 대상 문자열 내에서 패턴과 일치하는 모든 문자열을 전역 검색 | | m | Multi line | 문자열의 행이 바뀌더라도 패턴 검색을 계속한다. |
- 하나 이상을 동시에 사용 가능
- 기본 값은 대소문자 구별해서 패턴 검색, 첫 번째 매칭한 대상만 검색하고 종료
const target = 'Is this all there is?';
target.match(/is/ig);
// ["Is", "is", "is]
패턴
- / 로 열고 닫음
- 문자열의 따옴표는 생략
1. 문자열 검색
const target = 'Is this all there is?';
target.match(/is/i);
// ["Is", index:0, input: "Is this all there is?", groups: undefined]
2. 임의의 문자열 검색
- . 은 문자 한 개를 의미
const target = 'Is this all there is?';
// 3자리 문자열을 대소문자를 구별하여 전역 검색한다.
const regExp = /.../g;
// ["Is ", "thi", "s a", ... ]
3. 반복 검색
- {m,n} 은 앞선 패턴이 최소 m 번, 최대 n 번 반복되는 문자열을 의미
- 콤마뒤에 공백 있으면 안됨
const target = 'A AA B BB Aa Bb AAA';
// A가 최소 1번 최대 2번 반복되는 문자열을 전역으로 검색
const regExp = /A{1,2}/g;
target.match(regExp); // ['A','AA','A','AA','A']
- {n} 은 앞선 패턴이 n번 반복 {n,n} 과 같음
- {n,} 최소 n번 이상 반복되는 문자열
-
- 는 앞선 패턴이 최소 한 번 이상 반복되는 문자열 {1,} 과 같다.
- ? 는 앞선 패턴이 최대 한 번 이상 반복되는 문자열 의미 {0,1}r과 같다.
4. OR 검색
-
는 or 의 의미를 가짐 -
/A B/ A또는 B를 의미 - [] 내의 문자는 or 로 동작
- 범위로 지정하려면 - 를 사용
- \d 숫자 의미
- \D 숫자가 아닌 문자 의미
- \w 알파벳 숫자 언더스코어 [A-Za-z0-9_] 와 같음
- \W 알파벳 숫자 언더스코어가 아닌 문자 의미
// A - Z 가 한 번 이상 반복되는 문자열 전역 검색
const regExp = /[A-Z]+/g;
// A - Z 또는 a-z 가 한 번 이상 반복되는 문자열 전역 검색
const regExp = /[A-Za-z]+/g;
// 숫자 0~9 한 번 이상 반복되는 문자열
const reExp = /[0-9]+/g;
// 숫자 0~9 ','가 한 번 이상 반복되는 문자열
const regExp = /[\d,]+/g;
5. NOT 검색
- [] 내에 ^는 not 을 의미
- [^0-9] 는 숫자를 제외한 문자 의미
6. 시작 위치로 검색
- [] 밖의 ^은 문자열의 시작을 의미함
- /^https/ → http로 시작하는지 검사
7. 마지막 위치로 검색
- $ 는 문자열의 마지막을 의미
- /com$/ → ‘com’ 으로 끝나는지 검사
자주 사용하는 정규표현식
1. 특정 단어로 시작하는지 검사
- /^https?:\/\//.test(url)
2. 특정 단어로 끝나는지 검사
- /html$/.test(fileName);
3. 숫자로만 이루어진 문자열인지 검사
- /^\d+$/.test(target);
4. 하나 이상의 공백으로 시작하는지 검사
- /^[\s]+/ → \s는 공백 의미
5. 아이디로 사용 가능한지 검사
- /^[A-Za-z0-9]{4,10}$/
- 대소문자 또는 숫자로 시작하고 4~10자리인지 검사
6. 메일 주소 형식에 맞는지 검사
7. 핸드폰 번호 형식에 맞는지 검사
- /^\d{3}-\d{3,4}-\d{4}$/
8. 특수문자 포함 여부 검사
- /[^A-Za-z0-9]/
- 특수 문자 제거할때 유용함 replace(/[^A-Za-z0-9]/gi , ‘’)
Leave a comment