정규표현식(Regular Expression, RegExp)은 특정한 규칙을 가진 문자열의 패턴을 표현하기 위해 사용되는 일종의 언어다. 자바스크립트뿐만 아니라 어떤 개발 언어에서도 범용적으로 사용 가능하는 특징이 있다.
정규표현식은 / 사이에 패턴을 넣어 정의한다.
const regex = /pattern/flags;
플래그는 정규표현식의 옵션으로 선택적으로 사용 가능하며, 한 개 이상의 플래그를 동시에 설정할 수 있다.
플래그 종류
g (global search) : 문자열 내의 모든 패턴 검색
i (case-insensitive) : 대소문자 구분 없이 검색
m (multi-line search) : 여러 줄 검색
정규표현식에서 다양한 패턴을 표현할 수 있는 기본적인 구성 요소는 다음과 같다. 이 외에도 다양한 패턴이 있으니 필요할 때 찾아서 사용하면 될 것 같다.
검색:
[] : 괄호 안의 문자들 중 하나[^] : 괄호 안의 문자를 제외한 것^문자열 : 특정 문자열로 시작(괄호x)문자열$ : 특정 문자열로 끝남() : 그룹 검색 및 분류(a|b) : a 또는 b와 일치매칭:
a-zA-Z : 영어 알파벳(-으로 범위 지정)ㄱ-ㅎ가-힣 : 한글 문자(-으로 범위 지정)0-9 : 숫자(-으로 범우 ㅣ지정). : 모든 문자열(단, 줄바꿈x)\d : 숫자(0-9)\D : 숫자가 아닌 것\w : 문자(알파벳, 숫자, 언더스코어(_))\W : /w가 아닌 것\s : 공백(공백, 탭 등)\S : 공백이 아닌 것\특수기호 : 특수기호횟수:
* : 0회 이상 반복+ : 1회 이상 반복? : 선택적 (0회 or 1회) 반복{n} : n회 반복{n, } : n회 이상 반복{n,m} : 최소 n회, 최대 m회 반복자바스크립트에서는 RegExp 객체나 문자열 메서드(match, replace, test, search) 등을 통해 정규표현식을 활용할 수 있다.
// 한국 전화번호 형식 검증(괄호 안 번호 중 하나와 일치 + 하이픈(-) + 3자리 또는 4자리 숫자 + 하이픈(-) + 4자리 숫자)
const regex = /^(010|011|016|017|018|019)-\d{3,4}-\d{4}$/gm;
const str = `010-123-1234`;
const result = str.match(regex); // ['010-123-1234']
// 1에서 9 사이의 숫자 중 하나 + 전역검색(일치하는 모든 숫자 탐색)
const regex = /[1-9]/g;
const str = `This123is456Java789script`;
const result = str.replace(regex, ""); // ""(빈 문자열)로 대체
console.log(result); // ThisisJavascript
const regex = /^\d{5}$/; // 5자리 숫자
const str = `12345`;
const result = regex.test(str); // true;
const regex = /^\d{5}$/;
const str = `1234`;
const result = str.search(regex); // -1
정규표현식은 유효성 검사(이메일, 비밀번호 등)과 문자열 반환에 많이 사용된다고 한다. 다소 복잡한 느낌이 없잖아 있지만 범용성도 좋을뿐더러 강력한 문자열 매칭, 변환 기능을 가지고 있기에 공부해두면 유용하게 사용할 수 있을 것이다.