[JavaScript] 정규 표현식(Regular Expression)
정규 표현식(Regular Expression)
정규 표현식(regular expression)은 문자 검색과 교체에 사용되는 패턴으로 강력한 기능을 제공합니다.
자바스크립트에선 RegExp 객체와 문자열 메서드를 조합해 정규표현식을 사용할 수 있습니다.
정규 표현식(‘regexp’ 또는 'reg’라고 줄여서 사용)은 패턴(pattern) 과 선택적으로 사용할 수 있는 플래그(flag) 로 구성됩니다. 정규식 객체를 만들 땐 두 가지 문법이 사용됩니다.
‘긴’ 문법은 다음과 같습니다.
regexp = new RegExp("pattern", "flags");
‘짧은’ 문법은 슬래시(빗금) "/"를 사용합니다.
regexp = /pattern/; // 플래그가 없음
regexp = /pattern/gmi; // 플래그 g, m, i가 있음
regexp.test(string)
패턴과 일치하는 부분 문자열이 하나라도 있는 경우 메서드 regexp.test(str)을 호출하면 true가, 그렇지 않으면 false가 반환됩니다.
str.search(regexp)
정규표현식과 주어진 스트링간에 첫번째로 매치되는 것의 인덱스를 반환한다. 찾지 못하면 -1 를 반환한다.
let str = "Hello World, world, World!";
let str2 = str.replace("World", "Seoul");
console.log(str2); // Hello Seoul, world, World!
const regexp = /World/gi; // 플래그는 g(모두 찾아라), i(대소문자구분하지마라)
console.log(str.replace(regexp, "Seoul")); // Hello Seoul, Seoul, Seoul!
const regexp2 = /Wrld/;
// test() 함수는 찾고자하는 정규식 패턴이 있으면 true, 없으면 false
console.log(regexp2.test(str)); // false
console.log(str.search(regexp)); // 6
str.match(regexp)
match() 메서드는 문자열이 정규식과 매치되는 부분을 검색합니다. 문자열이 정규식과 일치하면, 일치하는 전체 문자열을 첫 번째 요소로 포함하는 Array를 반환한 다음 괄호 안에 캡처된 결과가 옵니다. 일치하는 것이 없으면 null이 반환됩니다.
let str = "123abc456def";
const regexp3 = /[0-9]{2}a/g; // 0~9의 숫자가 2개오고 이어서 a가 나오는것을 찾음
let result = str.match(regexp3);
console.log(result); // ['23a']
const regexp4 = /[a-zA-Z]/g;
result = str.match(regexp4);
console.log(result); // ['a', 'b', 'c', 'd', 'e', 'f']
전화번호 패턴
// 전화번호 패턴이 맞는지
let tel = "010-1111-2222"; // 숫자 3자리 + 하이픈(-) + 숫자 4자리 + 하이픈(-) + 숫자 4자리
const regexpTel = /^010-\d{4}-\d{4}$/; // [0-9]는 \d와 같다.
// {4}는 이어서 4개의 숫사 0~9가 온다는 의미
console.log(regexpTel.test(tel)); // true
이메일 패턴
// 이메일주소 맞는지
let email = "karina.pen@gmail.com";
const regexpEmail = /^([a-z]+\d*)+(\.?[a-z]+\d*)+@([a-z]+\d*)+(\.[a-z]{2,3})+$/;
console.log(regexpEmail.test(email)); // true
^([a-z]+\d*)+
^ 시작점 &는 마지막을 나타냄
[a-z] a~z까지의 문자가 입력가능
+ 1개이상 즉 a~z까지 문자가 한개이상
\d 0~9의 숫자 입력가능
* 0개이상 즉 0~9의 숫자가 0개이상
([a-z]+\d*)+ 괄호안의 모든 조건이 한개이상
(\.?[a-z]+\d*)+
\. 정규식에서 일반문자 . 을 넣으려면 \.으로 넣어야한다. 홑,쌍따옴표 같이 사용할때처럼
? 0개 혹은 한개
\.? 점(.) 0개 혹은 한개
[a-z]+\d* 소문자 한개이상 그리고 숫자 0개 이상
참고자료
https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Regular_Expressions
https://ko.javascript.info/regexp-introduction
https://ko.javascript.info/regexp-anchors
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String/match