정규표현식 공부 : https://curryyou.tistory.com/234
정규표현식 사용법
/패턴/플래그
슬래시(/) 사이에는 매칭시킬 '패턴'
슬래시(/) 다음에는 옵션 설정하는 '플래그'
{ 패턴 : 의미 }
- { a-zA-Z : 영어알파벳(-으로 범위 지정) }
- { ㄱ-ㅎ가-힣 : 한글 문자(-으로 범위 지정) }
- { 0-9 : 숫자(-으로 범위 지정) }
- { . : 모든 문자열(숫자, 한글, 영어, 특수기호, 공백 모두. 단, 줄바꿈X) }
- { \d : 숫자 }
- { \D : 숫자가 아닌 것 }
- { \w : 영어 알파벳, 숫자, 언더스코어(_) }
- { \W : /w 가 아닌 것 }
- { \s : space 공백 }
- { \S : space 공백이 아닌 것 }
- { \특수기호 : 특수기호 }
아래 패턴들을 이용하면, AND, OR, StartWith, EndWith 등의 다양한 조합을 만들 수 있다.
{ 기호 : 의미 }
- { | : OR }
- { [ ] : 괄호안의 문자들 중 하나 }
- { [^문자] : 괄호안의 문자를 제외한 것 }
- { ^문자열 : 특정 문자열로 시작(괄호 없음 주의!) }
- { 문자열$ : 특정 문자열로 끝남 }
- { () : 그룹 검색 및 분류(match메서드에서 그룹별로 묶어줌) }
- { (?: 패턴) : 그룹 검색(분류X) }
- { \b : 단어의 처음/끝 }
- { \B : 단어의 처음/끝이 아님 }
특정 패턴이 몇번 반복되는지도 필터링 가능합니다.
{ 기호 : 의미 }
- { ? : 최대 한번(없음 || 한개) }
- { * : 없거나 있거나 (없음 || 있음): 여러개 포함 }
- { + : 최소 한개(한개 || 여러개) }
- { {n} : n개 }
- { {Min,} : 최소 Min개 이상 }
- { {Min, Max} : 최소 Min개 이상, 최대 Max개 이하 }
플래그는 동시에 여러개 사용할 수도 있습니다. 예) gi, gm 등
{ 플래그 : 의미 }
- { g : Global == 모든 문자 검색(안 쓰면 매칭되는 첫 문자만 검색) }
- { i : Ignore Case == 대소문자 구분 안함 }
- { m : Multi line == 여러 행의 문자열에 대해 검색 }
- 이외에 Singleline, Unicode, Sticky 옵션도 있는데, 잘 쓰진 않는듯 한다.
자바스크립트 코드 상에서는 아래 메서드를 통해 패턴을 검사하고, .매칭되는 문자열을 추출, 변환합니다.
{ 메서드, 의미 }
- { ("문자열").match(/정규표현식/플래그) : "문자열"에서 "정규표현식"에 매칭되는 항목들을 배열로 반환 }
- { ("문자열").replace(/정규표현식/, "대체문자열") : "정규표현식"에 매칭되는 항목을 "대체문자열"로 변환 }
- { ("문자열").split(정규표현식) : "문자열"을 "정규표현식"에 매칭되는 항목으로 쪼개어 배열로 반환 }
- { (정규표현식).test("문자열") : "문자열"이 "정규표현식"과 매칭되면 true, 아니면 false반환 }
- { (정규표현식).exec("문자열") : match메서드와 유사(단, 무조건 첫번째 매칭 결과만 반환) }
사용 사례
문자열에서 해당하는 문자열 전부 탐색하려면, replaceAll을 사용하면 될텐데, 그냥 /g를 사용하면 편하다.
^
의 경우, [ ] 안에서는 "제외"를 의미하고 밖에서는 "첫 문자"를 의미한다.
let regExp = /[^a-zA-Z]/g;
str1 = str1 .replace(regExp, '');
for (let i=0; i<str1.length; i++) {
if (str1.match(regExp) {
// 알파벳 아닌 부분 체크
}
}
[]
로 감싸져 있으므로 \뒤에 오는 특수문자들 중 하나
let expression = "100-200*300-500+20";
const regExp = /([\*+-])/g;
const splitted = expression.split(regExp);
console.log(splitted);
// [ '100', '-', '200', '*', '300', '-', '500', '+', '20' ]
let expression1, expression2 = '';
let expression = "100@200@300@500@20";
expression1 = expression.replace('@', ' ');
expression2 = expression.replace(/@/gi, ' ');
console.log(expression1, expression2);
정규표현식 /\s문자열\s|\s/
: (공백문자열공백) 또는 (공백)
=> \s
가 공백을 의미하고, /and/가 and 문자열을 의미한다.
\d : 숫자 [0~9]
\d{number} : {} 안에 있는 건 숫자의 개수를 의미
?= : 전방탐색 = 뒤에 오는 문자 전까지를 의미함.
function hide_numbers(s) {
return s.replace(/\d(?=\d{4})/g, "*");
}
console.log(hide_numbers("027778888"));
자주 사용하는 정규 표현식 (Regular Expression) 정리
정규표현식(Regular Expression) 기초/기본 쉽고 상세한 사용 방법 정리(샘플 예제 코드)
Javascript 와 RegExp 정규 표현식