31.1 정규 표현식이란?
정규 표현식(regular expression)
- 일정한 패턴을 가진 문자열의 집합을 표현하기 위해 사용하는 형식 언어 (formal language)
- 문자열을 대상으로 패턴 매칭 기능 제공
- 패턴 매칭 기능
: 특정 패턴과 일치하는 문자열을 검색하거나 추출 또는 치환할 수 있는 기능
- 정규 표현식을 사용하면 반복문과 조건문 없이 패턴을 정의하고 테스트하는 것으로 간단히 체크
31.2 정규 표현식의 생성
1) 정규 표현식 리터럴
- 패턴과 플래그로 구성
const target = 'Is this all there is?';
//패턴:is
//플래그: i => 대소문자를 구별하지 않고 검색
const regexp = /is/i;
//test 메서드는 target 문자열에 대해 정규 표현식 regexp의 패턴을 검색하여
//매칭 결과를 불리언값으로 반환
regexp.test(target); //true
2) RegExp 생성자 함수
- 변수를 사용해 동적으로 RegExp 객체 생성 가능
const count = (str,char) => (str.match(new RegExp(char,'gi')) ?? []).length;
count('Is this all ther is?', 'is'); //3
count('Is this all there is?', 'xx'); //0
31.3 RegExp 메서드
31.3.1 RegExp.prototype.exec
- 인수로 전달받은 문자열에 대해 정규 표현식의 패턴을 검색하여 매칭 결과를 배열로 반환
- 매칭 결과가 없는 경우 null을 반환
- 문자열 내의 모든 패턴을 검색하는 g플래그를 지정해도 첫 번째 매칭 결과만 반환
const target = 'Is this all there is';
const regExp =/is/;
regExp.exec(target);
//[ 'is', index: 5, input: 'Is this all there is', groups: undefined ]
31.3.2 RegExp.prototype.test
- 인수로 전달받은 문자열에 대해 정규 표현식의 패턴을 검색하여 매칭 결과를 불리언 값으로 반환
const target = 'Is this all there is';
const regExp =/is/;
regExp.test(target); //true
31.3.3 String.prototype.match
- 대상 문자열과 인수로 전달받은 정규 표현식과의 매칭 결과를 배열로 반환
- g 플래그가 지정되면 모든 매칭 결과를 배열로 반환
const target = 'Is this all there is';
const regExp =/is/g;
target.match(regExp); //[ 'is', 'is' ]
31.4 플래그
- 정규 표현식의 검색 방식을 설정하기 위해 사용
- 순서와 상관없이 하나 이상의 플래그를 동시에 설정 가능
- 기본값 : 대소문자 구별, 첫번째 매칭 대상만 검색하고 종료
플래그 | 의미 | 설명 |
i | Igonre case | 대소문자를 구별하지 않고 패턴을 검색 |
g | Global | 대상 문자열 내에서 패턴과 일치하는 모든 문자열을 전역 검색 |
m | Multi line | 문자열의 행이 바뀌더라도 패턴 검색을 계속 |
31.5 패턴
- 문자열의 일정한 규칙을 표현하기 위해 사용
- 패턴은 /로 열고 닫으며 문자열의 따옴표는 생략
31.5.1 문자열 검색
- 대소문자를 구별하지 않고 검색하려면 플래그 i사용
const target = 'Is this all there is';
const regExp =/is/i;
target.match(regExp);
//[ 'Is', index: 0, input: 'Is this all there is', groups: undefined ]
- 검색 대상 문자열 내에서 패턴과 매치하는 모든 문자열을 전역 검색하려면 플래그 g 사용
31.5.2 임의의 문자열 검색
- .은 임의의 문자 한 개를 의미
const target = 'Is this all there is';
//임의의 3자리 문자열을 대소문자를 구별하여 전역 검색
const regExp = /.../g;
target.match(regExp);
//[ 'Is ', 'thi', 's a', 'll ', 'the', 're ' ]
31.5.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번 반복되는 문자열
const target = 'A AA B BB Aa Bb AAA';
//'A'가 2번 반복되는 문자열을 전역 검색
const regExp = /A{2}/g;
target.match(regExp);
//[ 'AA', 'AA' ]
- {n,}은 앞선 패턴이 최소 n번 이상 반복되는 문자열
const target = 'A AA B BB Aa Bb AAA';
//'A'가 최소 2번 이상 반복되는 문자열을 전역 검색
const regExp = /A{2,}/g;
target.match(regExp);
// 'AA', 'AAA' ]
- + 는 앞선 패턴이 최소 한번 이상 반복되는 문자열
const target = 'A AA B BB Aa Bb AAA';
//'A'가 최소 한번 이상 반복되는 문자열을 전역 검색
const regExp = /A+/g;
target.match(regExp);
// [ 'A', 'AA', 'A', 'AAA' ]
- ?는 앞선 패턴이 최대 한번(0번 포함) 이상 반복되는 문자열
const target = 'color colour';
//'colo'다음 'u'가 최대 한번(0번 포함)이상 반복되고 'r'이 이어지는
//문자열 'color ,colour'을 전역 검색
const regExp = /colou?r/g;
target.match(regExp);
//[ 'color', 'colour' ]
31.5.4 OR 검색
- | 는 or의 의미를 가짐
const target = 'A AA B BB Aa Bb';
//'A'또는 'B'를 전역 검색
const regExp = /A|B/g;
target.match(regExp);
//[ 'A', 'A', 'A','B', 'B', 'B','A', 'B']
- [ ] 내의 문자는 or로 동작
- [ ] 뒤에 +를 사용하면 앞선 패턴을 한 번 이상 반복
const target = 'A AA B BB Aa Bb';
//'A'또는 'B'가 한 번 이상 반복되는 문자열을 전역 검색
const regExp = /[AB]+/g;
target.match(regExp);
//[ 'A', 'AA', 'B', 'BB', 'A', 'B' ]
- 범위를 지정하려면 [ ] 내의 -를 사용
const target = 'A AA B BB Aa Bb';
//'A'~ 'Z'가 한 번 이상 반복되는 문자열을 전역 검색
const regExp = /[A-Z]+/g;
console.log(target.match(regExp));
//[ 'A', 'AA', 'B', 'BB', 'A', 'B' ]
- \d는 숫자를 의미 \d는 [0-9]와 같음
\D는 숫자가 아닌 문자를 의미
- \w는 알파벳, 숫자, 언더 스코어를 의미 \w는 [A-Za-z]와 같음
\W는 알파벳, 숫자, 언더 스코어가 아닌 문자를 의미
31.5.5 NOT 검색
- [...]내의 ^는 not의 의미를 가짐
const target = ' AA B BB 12 Aa Bb';
//숫자를 제외한 문자열을 전역 검색
const regExp = /[^0-9]+/g;
target.match(regExp);
//[ ' AA B BB ', ' Aa Bb' ]
31.5.6 시작 위치로 검색
- [...] 밖의 ^는 문자열의 시작을 의미
const target = 'https://poiemaweb.com';
//'https'로 시작하는지 검색
const regExp = /^https/;
regExp.test(target); //true
31.5.7 마지막 위치로 검색
- $는 문자열의 마지막을 의미
const target = 'https://poiemaweb.com';
//'com'으로 끝나는지 검색
const regExp = /com$/;
regExp.test(target); //true
'JavaScript' 카테고리의 다른 글
[Deep dive] 33장 7번째 데이터 타입 Symbol (0) | 2023.08.17 |
---|---|
[Deep dive] 32장 String (0) | 2023.08.17 |
[Deep dive] 30장 Date (0) | 2023.08.17 |
[Deep dive] 29장 Math (0) | 2023.08.17 |
[Deep dive] 28장 Number (0) | 2023.08.17 |