플래그
정규표현식에는 검색에 영향을 주는 플래그를 선택적으로 붙일 수 있다.
i
i 플래그가 붙으면 대·소문자 구분 없이 검색합니다. A===a
g
g 플래그가 붙으면 패턴과 일치하는 모든 것들을 찾습니다. g 플래그가 없으면 패턴과 일치하는 첫 번째 결과만 반환됩니다.
m
행이 바뀌어도 계속 검색이 가능합니다.
s
.이 개행 문자 \n도 포함하도록 ‘dotall’ 모드를 활성화합니다.
u
유니코드 전체를 지원합니다. 이 플래그를 사용하면 서로게이트 쌍(surrogate pair)을 올바르게 처리할 수 있습니다.
y
문자 내 특정 위치에서 검색을 진행하는 ‘sticky’ 모드를 활성화 시킵니다.
문자열 검색
const searchText = /찾을 문자열/flag
// abc 찾기
const searchText = /abc/;
// 대소문자를 구별하지 않고 abc 찾기
const searchText = /abc/i;
// 대소문자 구별하지 않고 패턴과 일치하는 모든 abc 찾기
const searchText = /abc/ig;
임의의 문자열 검색
.은 임의의 문자 하나를 의미한다.
// 임의의 3자리 문자열을 대소문자를 구별하여 전역 검색(공백 포함)
const searchText = /.../g;
반복 검색
{m, n} --> 최소 문자 m번, 최대 n 번 반복
{n} --> 앞선 패턴이 n번 반복 ({n, n} === {n})
{n,} --> 앞선 패턴이 최소 n번 이상 반복
+ --> 앞선 패턴이 최소 한번 이상 반복 ({1,} === + )
? --> 앞선 패턴이 최대 한번 이상 반복 ({,1} === ? )
// A가 최소 2번 이상, 최대 3번 반복되는 문자열 전역 검색한다.
const searchText = /A{2, 3}/g;
// A가 최소 한번 이상 반복되는 문자열을 검색한다.
const searchText = /A+/g;
// A가 0번 또는 최대 한번이상 반복되는 문자열을 의미하고, 이를 전역검색한다.
const searchText = /A?/g;
OR 검색
// A 또는 B를 전역 검색한다.
const searchText = /A|B/g;
// A 또는 B를 한번 이상 반복하는 문자열을 전역 검색한다.
const searchText = /A+|B+/g;
// 위와 동치이다. []내의 문자는 or로 동작한다.
const searchText = /[AB]+/g;
// 범위 지정
const searchText = /[A-Z]+/g;
// 대소문자 구별 X, A~Z 또는 a~z 가 한번 이상 반복되는 문자열을 전역 검색한다.
const searchText = /[A-Za-z]+/g;
// 0~9가 한번 이상 반복되는 문자열을 전역 검색한다.
cosnt searchText = /[0-9]+/g;
문자 클래스
\d --> 0에서 9 사이의 문자( === [0-9])
\s(공백) --> 스페이스, 탭(\t), 줄 바꿈(\n)을 비롯하여 아주 드물게 쓰이는 \v, \f, \r 을 포함하는 공백 기호
\w --> 문자, 숫자, 언더스코어 의미
// 0~9가 한 번 이상 반복되는 문자열을 전역 검색
const regExp = /[\d]+/g
const regEXp = /[0-9]+/g
// 알파벳, 숫자, 언더스코어가 들어간 문자열 전역 검색
const regExp = /[\w]+/g
const regExp = /A-Za-z0-9_]+/g
반대 클래스
\D -> 0~9가 아닌 문자를 의미함
\W -> 알파벳, 숫자, 언더스코어가 아닌 문자를 의미함
NOT 검색
[...] 내의 ^은 not의 의미이다.
/[^0-9]/ === /[\D]/
/[^A-Za-z0-9_]/ === /[\W]/
시작 위치로 검색
[...] 밖의 ^ 문자열은 시작을 의미한다.
// https로 시작하는지 검사한다.
const regExp = /^https/;
마지막 위치로 검색
$는 문자열의 마지막을 의미한다.
// com으로 끝나는지 검사한다.
const regExp = /com$/;
숫자로만 이루어진 문자열인지 검사
/^\d+$/.test(target);
하나 이상의 공백으로 시작하는지 검사
문자열이 하나 이상의 공백으로 시작하는지 검사
\s는 여러가지 공백 문자(스페이스, 탭 등)을 의미한다.
/^[\s]+/.test(target);
아이디로 사용 가능한지 검사
알파벳 대소문자 또는 숫자로 시작하고 끝나며 4~10 자리인지 검사
/^[A-Za-z0-9]{4,10}$/.test(id);
메일 주소 형식에 맞는지 검사
/^[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*\.[a-zA-Z]{2,3}$/.test(email);
핸드폰 번호 형식에 맞는지 검사
/^\d{3}-\d{3,4}-\d{4}$/.test(cellphone);
특수 문자 포함 여부 검사
(/[^A-Za-z0-9]/gi).test(target);
자주 사용하는 정규표현식 패턴
팰린드롬(회문)
영문자와 숫자만 고려한 팰린드롬
const isPalindrome = s => {
const temp = s.toLowerCase().replace(/[^a-z0-9]/g, '');
console.log(temp === temp.split('').reverse().join(''));
};
전달받은 문자열 s를 소문자로 바꾸고 모든 공백을 제거한뒤, 남은 문자열을 가지고 거꾸로 뒤집은 문자열과 같다면 그 문자열은 팰린드롬이다.
replace(/[^a-z0-9]/g, '')의 의미는 소문자 a~z와 0~9를 제외한 나머지 문자들을 ''(빈 문자열)로 대체하는 것!
특정 문자를 ~로
문자열에서 특정 문자가 A이고 모두 #으로 바꾸어야 한다고 하면 최신 문법 replaceAll('A', '#')함수를 사용하여도 되지만 정규표현식을 이용하면 다음과 같다.
const replaceAtoSharp = s => console.log(s.replace(/A/g, '#'));
replaceAtoSharp('BANANA'); // => B#N#N#
A라는 문자를 모두 검색하여서 #으로 바꾸는 정규 표현식이다.
대문자 찾기
특정 문자열에서 대문자의 개수를 찾아라
const countUpperCase = s => console.log(s.match(/[A-Z]/g).length);
countUpperCase('KoreaTimeGood'); // => 3
match함수를 이용하여 정규 표현식에 맞는 대문자들을 모두 찾아 그 배열의 길이를 반환하면 된다.
문자의 개수 찾기
특정 문자열이 주어지고 문자가 주어지면 그 문자열 안의 문자의 개수를 찾아라.
const count = (s, word) => console.log(s.match(new RegExp(word, 'g')).length);
count('COMPUTERPROGRAMMING', 'R'); // => 3
바로 인수로 전달받은 word를 사용할 수 없기 때문에, new RegExp 생성자 함수를 사용하여 패턴에 word와 플래그를 string 형식으로 주고 그 길이를 찾으면 된다.
대소문자 변환
대문자는 소문자로, 소문자는 대문자로 변환하여 출력하여라
const toggleCase = s =>
console.log(
s.replace(/./g, str =>
str === str.toUpperCase() ? str.toLowerCase() : str.toUpperCase()
)
);
toggleCase('StuDY'); // => 'sTUdy'
문자열 압축
const compress = s =>
console.log(s.replace(/(.)\1+/g, match => match[0] + match.length));
compress('ABBCCCE'); // => AB2C3E
(.)은 임의의문자열을 그룹으로 묶고, \1 그룹핑된 그룹의 첫 번째를 가리키며, +를 통해 1개 이상의 결과를 가리켜 최종적으로 BB와 CCC가 이에 해당이되고 해당 된 것들이 replace 2번째 콜백 함수의 인자로 들어가 결과를 반환하여 갖고 온다.
참고
https://ko.javascript.info/regexp-introduction
https://velog.io/@hustle-dev/JavaScript-%EC%A0%95%EA%B7%9C%ED%91%9C%ED%98%84%EC%8B%9D
'Study > 실무' 카테고리의 다른 글
[react] 다국어 적용하기 - 2편 (언어 변경 버튼 만들기) (0) | 2022.09.27 |
---|---|
[react] 다국어 적용하기 - 1편 (feat.react-i18next) (0) | 2022.09.27 |
new Date() 한국시간구하기 (0) | 2022.09.23 |
문자열에서 첫번째, 마지막 문자 가져오기 (0) | 2022.09.22 |
Axios delete시 body에 데이터 넣기 (0) | 2022.09.22 |