[JS] 정규표현식

codeCYJ·2022년 5월 31일
0

javaScript

목록 보기
18/35

플래그

정규표현식에는 검색에 영향을 주는 플래그를 선택적으로 붙일 수 있다.

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

profile
안녕하세요

0개의 댓글