정규표현식: 문자열에서 특정 문자 조합을 찾기 위한 패턴
문자열에 대해 replace나 match 메서드를 사용하면서 특정조건을 붙여 문자열을 찾아내거나 바꾸고싶을때 사용하는 정규 표현식에 대해 알아 보려고 합니다
/패턴/플래그
패턴에 내가 찾을 문자나 문자의 범위, 여러개의 문자를 설정할 수 있고
플래그는 내가 전부찾을지나 대소문자를 구분할지를 정할 수 있습니다.
어떤 문자들을 찾을지 정하는 패턴
[영어-영어] : a-z A-Z 같이 원하는 영어 범위를 설정가능
[한글-한글] : 가-하 가-힣 같이 원하는 한글 범위를 설정가능
[숫자-숫자] : 0-9나 2-7 같이 -로 숫자의 범위를 정할 수 있습니다
. : 모든 문자열(숫자, 한글, 영어, 특수기호, 공백 모두! 단, 줄바꿈X)
\d : 숫자
\D : 숫자가 아닌 것
\w : 영어 알파벳, 숫자, 언더스코어(_)
\W : \w 가 아닌 것
\s : 공백
\S : 공백이 아닌 것
\특수기호 : 특수기호 (별다른 조건이 없다면 특수기호를 찾을때 \가 없으면 오류가 발생합니다)
자주쓰는것들만 모았습니다
| : 검색할 문자 or 조건으로 추가
[]: []안에 모든 문자들을 찾음 and 조건으로 추가한다고 보면 된다
{n}:n개 수량인것
{n,}:최소 n개 수량을 검색
{m,n}:최소m개 최대n개의 수량
플래그로 특정해주지 않는다면 패턴에 맞는 제일 첫번째 것만 찾아 내기 때문에 아래와 같을때 사용해 주시면 되겠습니다
g: 모든 문자 검색(안 쓰면 매칭되는 첫 문자만 검색)
i: 대소문자 구분 안함
m: 여러 행의 문자열에 대해 검색
이건 제가 문제풀이를 하면서 많이 헷갈렸던 케이스들을 풀어내려고 합니다
코딩테스트 문제들을 풀면서 케이스들이 더 생기면 추가 하겠습니다
var s = "Hi! I'm jiseob!";
var a = s.match(/\!/g);
var b = s.match(/[!]/g);
console.log(a);
console.log(b);
결과
>
[ '!', '!' ]
[ '!', '!' ]
!같은 특수문자를 찾을때 그냥 /!/로 검색하게되면 오류가 발생하기때문에 \를 붙여주시거나 []안에 넣어주시는게 좋습니다
var s = "a banana";
var answer = s.match(/a/g);
var a = s.match(/na/g);
console.log(answer);
console.log(answer.length);
console.log(a);
console.log(a.length);
결과
>
['a','a','a','a']
4
['na','na]
2
먼저 첫번째 출력으로 확인할수 있듯 문자열 s에 있는 모든 a들을 배열에 담은뒤 그 배열의 길이가 문자열안의 a의 개수를 의미합니다
조금더 나아가 na라는 문자열들로 검색하여 개수를 알고싶을땐
var a = s.match(/na/g) 같이 활용해주시면 될 것 같습니다
var s = "abc def ghi";
var a=s.replace(/\s/g, "");
var b=s.replace(/ /g,"");
console.log(a);
결과
>
abcdefghi
abcdefghi
공백을 뜻하는 \s나 //안에 공백을 넣어주는 것 , g라는 모든 문자를 뜻하는 플래그를 이용하여 모든 공백들을 제거할 수 있습니다
var s = 'abcfabc';
console.log(s.match(/[ab]/g));
console.log(s.match(/a|b/g));
a와 b가 몇개 포함되어있는지 찾을때 위나 아래나 똑같은 결과가 똑같이 나옵니다.
a또는b를 모두 === a와b를 모두
var text = "제 전화번호 010-8888-3333 입니다 연락이 안될경우 010-111-2222";
console.log(text.match(/\d{3}-\d{4}-\d{4}/g));
결과
>
['010-8888-3333','010-111-2222']
전화번호를 찾기위해 \d라는 숫자조건과 전화번호 패턴을 찾기위한 {3}과 {4}라는 조건을 덧붙여 /\d{3}-\d{4}-\d{4}/ | /\d{3}-\d{4}-\d{4}/ 패턴을 설정합니다