정규 표현식 (Regular Expression)
: 문자열을 처리하는 방법 중의 하나로 특정한 조건의 문자를 '검색'하거나 '치환'하는 과정을 매우 간편하게 처리 할 수 있도록 하는 수단.
: 문자열에서 특정한 문자를 찾아내는 도구.
: 일정한 패턴을 가진 문자열의 집합을 표현하기 위해 사용하는 형식 언어.
문자열을 대상으로 패턴 매칭 기능을 제공함.
패턴 매칭 기능
: 특정 패턴과 일치하는 문자열을 검색하거나 추출 또는 치환할 수 있는 기능.
예시) 유효한 휴대폰 전화번호인지 체크하기
// 사용자로부터 입력받은 휴대폰 전화번호
const tel = '010-1234-567팔';
// 정규 표현식 리터럴로 휴대폰 전화번호 패턴을 정의한다.
const regExp = /^\d{3}-\d{4}-\d{4}$/;
// tel이 휴대폰 전화번호 패턴에 매칭하는지 테스트한다.
regExp.test(tel); // -> false
1. 정규 표현식 생성하기
1. 정규 표현식 생성하기
정규 표현식 객체를 생성할 땐 정규 표현식 리터럴과 RegExp 생성자 함수를 사용할 수 있다.
- 정규 표현식 리터럴: 패턴(”regexp”)과 플래그(”i”)로 구성됨
const regexp = /is/i;
- RegExp 생성자 함수:
const regexp = new RegExp(/is/i) const regexp = new RegExp(/is/, 'i');
2. RegExp 메소드
2. RegExp 메소드
- RegExp.prototype.exec : 패턴을 검색하여 매칭 결과를 배열로 반환. 매칭 결과가 없는 경우 null을 반환. g 플래그를 지정해도 첫 번재 매칭 결과만 반환함 주의.
// .exec()
const regExp = /is/;
const target = 'Is this all?';
regExp.exec(target);
// => ['is', index: 5, input: 'Is this all?', groups: undefined]
- RegExp.prototype.test : 패턴을 검색하여 매칭 결과를 불리언 값으로 반환.
// const regExp = /is/; const target = 'Is this all?'; regExp.test(target); // => true
- String.prototype.match : 대상 문자열과 인수로 전달받은 정규 표현식과의 매칭 결과를 배열로 반환. .exec 메소드와 달리 전역 매칭을 시행할 수 있기 때문에 자주 사용된다.
// const regExp = /is/; const target = 'Is this all?'; target.match(regExp); // => ['is', index: 5, input: 'Is this all?', groups: undefined]
- String.prototype.replace
- String.prototype.search
- String.prototype.split
3. 플래그
3. 플래그
정규 표현식의 검색 방식을 설정하기 위해 사용한다.
g, i, m, u, y, ?
의 총 6개가 존재한다.
i
= Ignore case : 대소문자를 구별하지 않고 패턴을 검색한다.
g
= Global : 대상 문자열 내에서 패턴과 일치하는 모든 문자열을 전역 검색한다.
m
= Multi line : 문자열의 행이 바뀌더라도 패턴 검색을 계속한다.
어떤 플래그도 사용하지 않을 경우, 기본적으로 대소문자를 구별하며 매칭 대상이 1개 이상 존재해도 첫 번째 매칭한 대상만 검색하고 종료한다.
const target = "Is this all?";
target.match(/is/);
// => ['is', index: 5, input: 'Is this all?', groups: undefined]
target.match(/is/i);
// => ['Is', index: 0, input: 'Is this all?', groups: undefined]
target.match(/is/g);
// => ['is']
target.match(/is/ig);
// => ['Is', 'is']
4. 패턴
4. 패턴
문자열의 일정한 규칙을 표현하기 위해 사용한다.
패턴의 특징:
- /로 열고 닫는다.
- 따옴표는 생략한다. (따옴표 포함시 따옴표까지도 패턴에 포함해서 검색)
- 메타문자(meta character) 또는 기호로 표현할 수 있다.
- 어떤 문자열 내에 패턴과 일치하는 문자열이 존재할 때 ‘정규 표현식과 매치(match)한다’고 표현한다.
패턴을 표현하는 여러가지 방법
- 문자열 검색 : 검색하고자 하는 문자열을 그대로 사용한다.
const target = 'Is this all?'; // 'is' 문자열과 매치하는 패턴. 플래그가 생략되었으므로 대소문자를 구별한다. const regExp = /is/; // target과 정규 표현식이 매치하는지 테스트한다. regExp.test(target); // => true // target과 정규 표현식의 매칭 결과를 구한다. target.match(regExp); // => ['is', index: 5, input: 'Is this all?', groups: undefined]
- 임의의 문자열 검색:
.
은 임의의 문자 한 개를 의미한다.const target = 'Is this all?'; // 임의의 3자리 문자열을 (대소문자를 구별하여 전역으로) 검색한다. const regExp = /.../g; // target과 정규 표현식의 매칭 결과를 구한다. target.match(regExp); // => ['Is ', 'thi', 's a', 'll?']
- 반복 검색:
{m,n}
은 앞선 패턴이 최소 m번, 최대 n번 반복되는 문자열을 의미한다. 콤마 뒤에 공백이 있으면 정상 동작하지 않음 주의!const target = 'A AA B BB Aa Bb AAA'; const regExp = /A{1,2}/g; // target과 정규 표현식의 매칭 결과를 구한다. target.match(regExp); // => ['A', 'AA', 'A', 'AA', 'A'] const regExp = /A{1,3}/g; target.match(regExp); // => ['A', 'AA', 'A', 'AAA']
target = 'A AA B BB Aa Bb AAA
AAAAA
'
라면?const target = 'A AA B BB Aa Bb AAA AAAAA'; const regExp = /A{1,3}/g; target.match(regExp); // => ['A', 'AA', 'A', 'AAA', 'AAA', 'AA'] const regExp = /A{1,2}/g; target.match(regExp); // => ['A', 'AA', 'A', 'AA', 'A', 'AA', 'AA', 'A']
{n}
은{n,n}
과 같다. = 앞선 패턴이 정확히 n번 반복되는 문자열을 검색한다.
{n,}
은{n,∞}
와 같다. = 앞선 패턴이 최소 n번 이상 반복되는 문자열을 검색한다.
+
는{1,∞}
와 같다. = 앞선 패턴이 최소 1번 이상 반복되는 문자열을 검색한다.
?
는{0,1}
과 같다. = 앞선 패턴이 최대 1번 반복되는 문자열을 검색한다.const target = 'color colour colouuur'; const regExp = /colou?r/g; // target과 정규 표현식의 매칭 결과를 구한다. target.match(regExp); // => ['color', 'colour']
- OR 검색:
|
은 or의 의미를 갖는다.const target = 'A AA B BB Aa Bb AAA'; // A 또는 B를 전역 검색한다. const regExp = /A|B/g; // target과 정규 표현식의 매칭 결과를 구한다. target.match(regExp); // => ['A', 'A', 'A', 'B', 'B', 'B', 'A', 'B', 'A', 'A', 'A'] // 분해되지 않은 단어 레벨로 검색하기: const regExp = /A+|B+/g; // /[AB]+/와 같음. target.match(regExp); // => ['A', 'AA', 'B', 'BB', 'A', 'B', 'AAA']
[]
내의 문자는 or로 동작한다.
[]
내에 -를 사용하면 범위가 지정된다.
- …
- NOT 검색:
[ … ]
내의^
는 not의 의미를 갖는다./[^0-9]+/g
; (숫자를 제외한 한 개 이상의 문자열 전역 검색)
- 시작 위치로 검색:
[ … ]
밖의^
는 문자열의 시작을 의미한다./^https/
; (’https’로 시작하는지 검사)
- 마지막 위치로 검색:
$
는 문자열의 마지막을 의미한다./com$/
; (’com’으로 끝나는지 검사)
5. 자주 사용하는 정규표현식 (문제)
5. 자주 사용하는 정규표현식 (문제)
- ‘http://’ 또는 ‘https://’로 시작하는지 검사하기
- ‘html’로 끝나는지 검사하기
- 숫자로만 이루어진 문자열인지 검사하기
- 하나 이상의 공백(스페이스, 탭 등)으로 시작하는지 검사하기
- 알파벳 대소문자 또는 숫자로 시작하고 끝나며 4~10자리인지 검사하기 (아이디로 사용 가능한지 검사)
- 핸드폰 번호 형식(000-0000-0000)에 맞는지 검사하기
- 특수 문자 포함 여부 검사하기
(참고: 모던 자바스크립트 Deep Dive - 이웅모, 위키북스)
※ 위 내용은 스스로 공부하며 적어둔 노트이며 불확실한 내용이 있을 수 있습니다. 학습용으로 적합하지 않음을 유념해주세요. ※
Uploaded by N2T