정규표현식(Regular Expression)은 특정한 규칙을 가진 문자열의 집합을 표현하는데 사용하는 형식 언어이다. 정규표현식을 사용하여 특정 문자열을 추출하거나 문자열의 일치 여부를 판단할 수 있다.
자바스크립트에서 정규표현식을 사용하기 위해서는 정규표현식을 생성해야한다. 정규표현식을 생성하기 위한 방법으로는 정규표현식 리터럴을 사용하거나, 정규표현식 생성자 함수인 RegEXP를 사용해서 생성한다.
//정규표현식 리터럴
let regExp1 = /pattern/flag;
//정규표현식 생성자 함수
let regExp2 = new RegEXP(/pattern/, 'flag'); // 문자열을 인수로 받음
let anyPattern = /pattern/
let regExp3 = new RegEXP(anyPattern, 'flag');
// 생성자 함수를 사용하면 변수를 정규표현식 생성자 함수의 인수로 전달할 수 있다.
정규표현식은 패턴을 가진 형식 언어이다. 정규표현식을 유용하게 사용하기 위해서는 사용자의 목적에 맞는 패턴을 표현할 수 있는 형식을 작성할 수 있어야 한다. 정규표현식의 패턴은 다양한 방법으로 표현되지만, 정해진 규칙에 따라 작성되어야만 한다.
let regExp = /pattern/flag
// 정규표현식의 시작 - 종료는 /~/ 로 나타낸다.
// //의 안에는 작성하고 싶은 정규표현식의 패턴이 들어간다.
// 정규표현식의 매칭,추출에 특별하게 사용되는 플래그는 /~/밖에 사용한다.
그룹화 : '( )' 를 사용하여 해당 패턴을 하나로 묶어 검색하는 것
캡쳐 : '( )' 를 사용했을 때 해당 그룹화된 패턴을 캡쳐하여 따로 저장하는 것
| 패턴 | 의미 |
|---|---|
| ^a | 문자열의 시작을 의미 (= a로 문자열이 시작하는 모든 패턴) |
| a$ | 문자열의 종료를 의미(= a로 문자열이 끝나는 모든 패턴) |
| . | 임의의 한 문자에 해당 (줄바꿈을 제외한 모든 문자) |
| a+ | 문자가 한 번이상 반복됨을 의미 (= 한번 이상 a가 반복되는 모든 패턴) |
| a? | 존재유무판별 (= a가 존재하거나 존재하지 않는 모든 패턴) |
| a* | 반복유무 (= a가 0번 이상 반복되는 모든 패턴 / 없음도 포함) |
| aㅣb | or 연산 (= a 또는 b 가 포함되는 모든 패턴) |
| (abc) | 그룹화 연산 (= abc를 그룹으로 묶어 하나의 패턴으로 처리, abc를 포함하고 있는 모든 패턴) |
| (ac)(bc) | 집합 그룹 연산 (= ac 와 bc를 포함하고 있는 모든 패턴) |
| (ac)(?:bc) | 그룹화/캡쳐 제외 예외 연산 |
| a{n} | 반복 연산 (= a가 n번 반복되는 모든 패턴) |
| a{n,} | 이상 반복 연산 (= a가 n번 이상 반복되는 모든 패턴) |
| a{n,m} | 제한 반복 연산 (= a가 n번 이상 m번 이하로 반복되는 모든 패턴) |
| [abcd] | 문자 선택 연산, [ ]안 나열된 문자들 중 하나 선택 (= a,b,c,d 중 제일 먼저 매칭되는 패턴 추출) |
| [^abcd] | [^ ] 사용시 not 연산자 (= a,b,c,d 를 제외한 모든 문자 매칭) |
| [a-z] | ' - ' 사용시 range 연산 (= a 부터 z 까지를 포함하는 모든 문자 매칭) |
| ab(?=c) | 전방검색연산 (= 해탕 패턴이 일치 했을 때, (?= )앞에 있는 패턴만을 매칭) |
| ab(?!c) | 부정전방검색연산 (= 해당 패턴이 일치 했더라도, (?! )안의 문자가 패턴에 포함되지 않아야만 매칭) |
| ab(?<=c) | 후방검색연산 (= 해당 패턴이 일치 했을 때, (?<= )뒤에 있는 패턴만을 매칭) |
| ab(?<!) | 부정후방검색연산 (= 해당 패턴이 일치 했더라도, (?<! )안의 문자가 패턴에 포함되지 않아야만 매칭) |
| \^ | 문자 '^' 매칭 |
| \b | 문자와 공백사이의 문자 매칭 |
| \B | 문자와 공백사이가 아닌 문자 매칭 |
| \d | digit, 숫자면 모두 매칭 |
| \D | non digit, 숫자가 아니면 모두 매칭 |
| \s | space (공백문자) 매칭 |
| \S | non space (공백문자가 아닌 문자) 매칭 |
| \t | tab (탭문자) 매칭 |
| \v | vertical tab(수직탭문자) 매칭 |
| \w | word (알파벳, 숫자, '_' )중의 한 문자일 경우 매칭 |
| \W | non word (알파벳, 숫자, '_')중의 한 문자가 아닐 경우 매칭 |
플래그를 사용하면 정규표현식을 사용하여 검색할 때, 다양한 옵션을 통해 검색 결과를 변경할 수 있다.
| 플래그 | 의미 |
|---|---|
| i (ignore case) | 대소문자를 구별하지 않고 검색 |
| g (global) | 문자열 내의 모든 패턴을 검색 |
| m (multi line) | 문자열의 행이 바뀌더라도 검색을 진행 |
| s | \n(개행문자)도 포함하도록 검색, (dotAll method) |
| u | unicode 패턴도 포함하여 검색, (unicode method) |
| y | sticky mode 검색 대상 문자열의 현재 위치에서 탐색 시작, (sticky method) |
1) RegExp.prototype.test
정규 표현식 매칭 결과를 true/false 값으로 반환
2) RegExp.prototype.match
정규 표현식 매칭 결과가 참일 경우 해당 결과값을 문자열로 반환