정규 표현식을 줄여서 정규식이라고 하기도 함
사용자로부터 입력받은 데이터가 프로그램에서 받고자 하는 데이터 형시고가 일치하는지 체크할 때 주로 사용
- 사용자가 입력한 이메일 정보가 이메일 형식에 맞는지
- 전화번호가 전화번호 형식에 맞는지
정규식 리터럴은 슬래시(/)로 감싸는 패턴임
const regexp = /World/;
생성자 함수를 사용하면 정규식이 실행 시점에 컴파일됨
정규식 패턴을 동적으로 적용해야 하는 경우 주로 사용
const regexp = new RegExp("World");
정규식에서 제공하는 내장 함수
정규식을 통해 찾고자 하는 문자열 패턴을 찾고 배열을 반환함.
대응되는 문자열을 찾지 못하면 null을 반환
대응되는 문자열이 있는지 검사하고 있으면 true, 없으면 false를 반환
대응되는 문자열을 찾아 배열로 반환하는 String 객체 내장 함수
대응되는 문자열이 없으면 null을 반환
exec 함수와 동일한 기능
대응되는 문자열이 있는지 검사하고, 대응되는 첫 번째 문자열의 인덱스를 반환
대응되는 문자열이 없으면 -1을 반환
대응되는 문자열을 찾아 다른 문자열로 치환하는 String 객체 내장 함수
대응되는 문자열을 찾고, 찾은 문자열을 기준으로 나누어서 배열로 반환하는 String 객체 내장 함수
정규식 특수 문자 중 특수 문자로써 동작하는 것이 아니라 문자 그대로 일반 문자로 인식되어야 하는 경우 특수 문자 앞에 백슬래시를 사용하여 일반 문자로 인식시키는 것
입력의 시작 부분에 대응
ex) /^A/의 경우 문자열의 시작이 "A"로 시작하냐는 것을 파악
입력의 끝 부분에 대응
ex) /t$/의 경우 문자열의 끝이 "t"로 끝나냐는 것을 파악
특수 문자 * 앞의 표현식이 0회 이상 반복되는 부분과 대응
ex) /bo*/는 문자열에 "b"를 포함하고, "b" 다음 문자로 "o"가 있을 수도 있고, 없을 수도 있다는 의미
특수 문자 + 앞의 표현식이 1회 이상 반복되는 부분과 대응
ex) /bo+/는 문자열에 "b"를 표함하고 "b" 다음 문자로 "o"가 1회 이상 있어야 한다는 의미
특수 문자 ? 앞의 표현식이 0 또는 1회 등장하는 부분과 대응
ex) /e?le?/는 e가 없어도 되고 있다면 1회를 의미하기 때문에 "l", "el", "ele", "le"를 포함하고 있는지와 대응
단일 문자에 대응
ex) /.n/는 "an apple"에서 "an에 대응
괄호는 포획 괄호(capturing parentheses)라 부름 괄호 안에 패턴 전체에 적용
ex) /foo{1,2}/는 마지막 "o"에만 {1, 2}가 적용되어 "o"가 최소 한 번, 최대 2번 나타나는 것에 대응
/(foo){1,2}/는 "foo" 전체에 {1,2}가 적용되어 "foo"가 최소 한 번, 최대 2번 나태나는 것에 대응
사용법은 (x)와 동일하지만, 대응되는 결과를 기억하지 않음
x 뒤에 y가 따라오는 경우에만 대응하며 lokahead라고 부름
ex) /\d+(?=g)/는 숫자 뒤에 "g"가 뒤따라오는 경우에만 대응
x 뒤에 y가 없는 경우에만 대응하며 negative lookahead라고 부름
x 또는 y에 대응됨
ex) /green|red/는 문자열에 "green" 혹은 "red"가 포함되었는지에 대응
앞 표현식이 n번 나타나는 부분에 대응. n은 반드시 양의 정수임
ex) /e{2}/는 e가 2번 나타나는 부분에만 대응하며 n보다 더 들어 있어도 처음 나타나는 "ee"에만 대응
n과 m은 양의 정수이고, n <= m을 만족해야 함.
앞 표현식이 최소 n개, 최대 m개가 나타나는 부분에 대응됨
문자셋으로 하이픈을 사용해서 문자의 범위를 지정할 수 있음
ex) [a-d]는 [abcd]와 똑같이 동작하며 문자열에 "a", "b", "c", "d" 중 하나라도 있으면 대응
부정 문자셋으로 패턴에 포함된 문자가 없는지와 대응. 하이픈을 사용하여 문자의 범위를 지정할 수 있음
ex) [^a-d]는 문자열에 "a", "b", "c", "d" 모두 없는지와 대응
백스페이스에 대응됨. 백스페이스 문자에 대응시키려면 대괄호([])를 사용해야 함
문자열에 있는 단어의 경계, 즉 첫 문자와 종료 문자에 대응
ex) /\bm/은 문자열의 단어 중 "m"으로 시작하는 단어에 대응하며, /m\b/는 문자열의 단어 중 "m"으로 끝나는 단어에 대응
단어 경계가 아닌 부분에 대응
숫자 문자에 대응 [0-9]와 동일
숫자 문자가 아닌 문자에 대응. [^0-9]와 동일
폼피드(U+000C) 문자에 대응
줄 바꿈(U+000A) 문자에 대응
엔터 키에 해당하는 문자에 대응
하나의 공백 문자에 대응
공백 문자가 아닌 문자에 대응
탭(U+0009) 문자에 대응
수직 탭(U+000B) 문자에 대응
밑줄 문자를 포함한 숫자, 영문 문자에 대응
[A-Za-z0-9_]와 동일. 즉, "_, A~Z, a~z, 0~9 와 동일
밑줄 문자, 숫자, 영문 문자가 아닌 문자에 대응
[^A-Za-z0-9_]와 동일
새로운 줄(new line)에 대응
널(U+0000) 문자에 대응
16진수 hh에 대응
유니코드 문자 16진수 hhh에 대응
전역 검색, 대소문자 구분 없는 검색을 수행할 수 있음
전역 검색 - 대응되는 문자 전부 검색
대소문자 구분 없는 검색
다중 행 검색
const regexp_mobile = /^(010)-\d{4}-\d{4}$/;
//반드시 010으로 시작하고, 그 다음 하이픈(-), 숫자 4자리, 하이픈(-), 숫자 4자리가 차례대로 입력된 형식
console.log(regexp_mobile.test("010-3124-1234"));
const regexp_email = /^([a-z]+\d*)+(\.?\w+)+@\w+(\.\w{2,3})+$/;
//반드시 알파벳 소문자로 시작하고 숫자는 0회 이상 패턴이 1번 이상 있고,
//점(.)은 있거나 1번만 사용할 수 있고,
//뒤에 하나 이상의 문자가 오고,
//@는 반드시 @가 있고,
//하나 이상의 문자가 오고,
//점(.)과 2~3개의 문자가 1회 이상 반복되어 종료한다는 것을 의미
console.log(regexp_email.test("jeremy2021.go@gamil.com"));