31.1 정규 표현식이란?
- 정규 표현식: 일정한 패턴을 가진 문자열의 집합을 표현하기 위해 사용하는 formal language
- 문자열을 대상으로 패턴 매칭 기능 제공 (특정 패턴과 일치하는지 문자열 검색/추출/치환하는 기능)
- ex. 휴대폰 전화번호 패턴 매칭 (숫자 3개 - 숫자 4개 - 숫자 4개)
- /^\d{3}-\d{4}-\d{4}$/
- 반복문과 조건문 없이 패턴 정의하고 테스트해서 간단히 체크 가능
- 주석, 공백 허용하지 않고 여러 기호를 사용해서 가독성이 좋지 않은 단점
- JS는 ES3부터 Perl의 정규 표현식 문법 도입
31.2 정규 표현식의 생성
- 정규 표현식 객체 생성 방법
- 정규 표현식 리터럴
- /regexp/i
- 앞 / 는 시작 기호
- 뒤 / 는 종료 기호
- regexp는 패턴
- i는 플래그 (i 플래그: 대소문자 구별하지 않고 검색)
- RegExp 생성자 함수
- new RegExp(패턴, 플래그)
31.3 RegExp 메서드
- RegExp.prototype.exec
- 인수로 전달받은 문자열에 대해 정규 표현식의 패턴을 검색하여 매칭 결과를 배열로 반환
- 매칭 결과 없으면 null 반환
- 문자열 내의 모든 패턴 검색하는 g 플래그 지정해도 첫 번째 매칭 결과만 반환함
- RegExp.prototype.test
- 인수로 전달받은 문자열에 대해 정규 표현식의 패턴을 검색하여 매칭 결과를 불리언 값으로 반환
- String.prototype.match
- 대상 문자열과 인수로 전달받은 정규 표현식과의 매칭 결과를 배열로 반환
- g 플래그 지정되면 모든 매칭 결과를 배열로 반환
31.4 플래그
- 플래그는 정규 표현식의 검색 방식을 설정하기 위해 사용 (총 6개 있음)
- i 플래그
- Ignore case
- 대소문자 구별하지 않고 패턴 검색
- g 플래그
- Global
- 대상 문자열 내에서 패턴과 일치하는 모든 문자열을 전역 검색
- m 플래그
- Multi line
- 문자열의 행이 바뀌더라도 패턴 검색 계속 진행
31.5 패턴
- 문자열 검색
- 패턴에 문자/문자열 지정하면 검색 대상 문자열에서 패턴으로 지정한 문자/문자열 검색
- 플래그 생략되면 대소문자 구별해서 매치한 첫 번째 결과만 반환
- 대소문자 구별하기 위해서는 i 플래그 사용
- 검색 대상 문자열 내에서 패턴과 매치하는 모든 문자열 전역 검색 위해 플래그 g 사용
- 임의의 문자열 검색
- . 은 임의의 문자 1개를 의미함
- 반복 검색
- {m,n}은 앞선 패턴이 최소 m번, 최대 n번 반복되는 문자열 의미 (콤마 뒤에 공백이 있으면 안됨)
- {n}은 앞선 패턴이 n번 반복되는 문자열
- {n}은 {n,n}과 같음
- {n,}은 앞선 패턴이 최소 n번 이상 반복되는 문자열
- +는 앞선 패턴이 최소 한번 이상 반복되는 문자열
- +는 {1,}과 같음
- ?는 앞선 패턴이 최대 한번 이상 반복되는 문자열
- ?은 {0,1}과 같음
- OR 검색
- | 은 or의 의미 가짐
- 분해되지 않은 단어 레벨로 검색하기 위해 + 함께 사용
- [ ] 내의 문자는 or로 동작 (그 뒤에 + 사용하면 앞선 패턴 한번 이상 반복)
- 범위 지정하고 싶으면 [ ] 내에 - 사용
- 대소문자 구별하지 않고 알파벳 검색 => /[A-Za-z]+/g
- 숫자 검색 => /[0-9]+/g
- \d는 [0-9]와 같음
- \D는 \d와 반대로 동작 (숫자가 아닌 문자 의미)
- \w는 알파벳, 숫자, 언더스코어 의미
- [A-Za-z0-9_]와 같음
- \W는 \w와 반대로 동작 (알파벳, 숫자, 언더스코어 아닌 문자 의미)
- NOT 검색
- [ ] 내의 ^은 not을 의미
- ex. [^0-9] => 숫자 제외한 문자
- \D 와 같음
- 시작 위치로 검색
- [ ] 밖의 ^은 문자열의 시작 의미
- [ ] 내의 ^은 not의 의미
- 마지막 위치로 검색
- $는 문자열의 마지막 의미
31.6 자주 사용하는 정규표현식
- 특정 단어로 시작하는지 검사
- [ ] 밖의 ^ 시작 패턴 사용하고, ? 나 | 함께 이용
- 특정 단어로 끝나는지 검사
- $ 문자열 마지막 패턴 이용
- 숫자로만 이루어진 문자열인지 검사
- /^\d+$/
- 하나 이상의 공백으로 시작하는지 검사
- \s는 여러 가지 공백 문자(스페이스, 탭 등) 의미
- \s 는 [\t\r\n\v\f]와 같음
- /^[\s]+/
- 아이디로 사용 가능한지 검사
- /^[A-Za-z0-9]{4,10}$/
- 메일 주소 형식에 맞는지 검사
- 핸드폰 번호 형식에 맞는지 검사
- /^\d{3}-\d{3,4}-\d{4}$/
- 특수 문자 포함 여부 검사
- /[^A-Za-z0-9]/gi
- 특수 문자 제거시에는 replace 메서드 이용
'Books > 모던 JS Deep Dive ✔️' 카테고리의 다른 글
[모던 JS Deep Dive] 33장 - 7번째 데이터 타입 Symbol (0) | 2022.01.19 |
---|---|
[모던 JS Deep Dive] 32장 - String (0) | 2022.01.19 |
[모던 JS Deep Dive] 30장 - Date (0) | 2022.01.15 |
[모던 JS Deep Dive] 29장 - Math (0) | 2022.01.15 |
[모던 JS Deep Dive] 28장 - Number (0) | 2022.01.15 |
댓글