[JavaScript Algorithm] 정규표현식(Regular Expression) - DAY 3

Dia Lee·2023년 1월 4일
0

Algorithm

목록 보기
5/7
post-thumbnail

알고리즘 문제를 맛만 여러번 본 결과...

정규표현식을 알면 편하다! 👀

사실 알고리즘 문제 풀면서 정규표현식을 사용하면 간단하게 끝나는 문제들이 많았다..
하지만 나는 일일히 반복문 돌려서 검사했다ㅎ 그 것 밖에 모르는데 어떡한담?
아무튼 정규표현식은 실제 프로젝트할 때도 유용하게 쓸 수 있을 것 같아서 간단하게 한 번 정리해 보려고 한다 ㅇ_<

✅ 정규표현식 (정규식)

문자열에서 특정 문자 조합을 찾기 위한 패턴이다.

JavaScript에서는 정규 표현식도 객체!
그래서 RegExp과 String의 메서드들을 함께 사용할 수 있다!!

간단하게 메서드별로 어떤 구조로 사용되는지 알아보자!

📌 정규식 메서드 사용

MethodResult
("문자열").match(/정규표현식/플래그)"문자열"에서 "정규표현식"에 매칭되는 항목들을 배열로 return
("문자열").replace(/정규표현식/, "대체문자열")"정규표현식"에 매칭되는 항목을 "대체문자열"로 변환
("문자열").split(정규표현식)"문자열"을 "정규표현식"에 매칭되는 항목으로 분할해서 배열로 return
(정규표현식).test("문자열")"문자열"이 "정규표현식"과 매칭되면 true, 아니면 false반환
(정규표현식).exec("문자열")match메서드와 유사하지만 무조건 첫번째 매칭 결과만 return

📌 정규식 플래그

FlagDescription
i대소문자 구분없이 검색
g문자열 내 모든 패턴 검색
m개행 상관없이 검색

📌 정규식 매칭 패턴

PatternDescription
a-zA-Z영어알파벳(-으로 범위 지정)
ㄱ-ㅎ가-힣한글 문자(-으로 범위 지정)
0-9숫자(-으로 범위 지정)
.모든 문자열(숫자, 한글, 영어, 특수기호, 공백 모두) 단, 줄바꿈 제외
\d숫자
\D숫자가 아닌 것
\w밑줄 문자를 포함한 영숫자 문자에 대응 (= [A-Za-z0-9_])
\W\w 가 아닌 것
\sspace 공백
\Sspace 공백이 아닌 것
\특수기호특수기호 * \^ \& ! \? ...등

📌 정규식 검색 기준 패턴

PatternDescription
|OR (a|b)
[]괄호안의 문자들 중 하나. /abc/ : "abc" 포함, /[abc]/ : "a" or "b" or "c" 포함, [다-바] : 다 or 라 or 마 or 바
[^문자]괄호안의 문자를 제외한 것 (대괄호 안에서 쓰면 제외의 뜻, 대괄호 밖에서 쓰면 시작점 뜻)
^문자열특정 문자열로 시작 (시작점)
문자열$특정 문자열로 끝남 (종착점)

사실 더 있다...근데 이정도만 알아도 될 것 같다~ 정도로만 정리하고 나중에 필요하면 추가로 정리해야겠다...ㅎ (변명)


❓응용문제 (문자열 정렬하기 - 1)

코딩테스트 연습 - 문자열 정렬하기(1)

문제 설명

문자열 my_string이 매개변수로 주어질 때, my_string 안에 있는 숫자만 골라 오름차순 정렬한 리스트를 return 하도록 solution 함수를 작성해보세요.


제한사항

  • 1 ≤ my_string의 길이 ≤ 100
  • my_string에는 숫자가 한 개 이상 포함되어 있습니다.
  • my_string은 영어 소문자 또는 0부터 9까지의 숫자로 이루어져 있습니다.

입출력 예

my_stringresult
"hi12392"[1, 2, 2, 3, 9]
"p2o4i8gj2"[2, 2, 4, 8]
"abcde0"[0]

입출력 예 #1

  • "hi12392"에 있는 숫자 1, 2, 3, 9, 2를 오름차순 정렬한 [1, 2, 2, 3, 9]를 return 합니다.

입출력 예 #2

  • "p2o4i8gj2"에 있는 숫자 2, 4, 8, 2를 오름차순 정렬한 [2, 2, 4, 8]을 return 합니다.

입출력 예 #3

  • "abcde0"에 있는 숫자 0을 오름차순 정렬한 [0]을 return 합니다.

풀이

//풀이 1
const solution = (my_string) => my_string.split('').filter(x=>!isNaN(x)).map((num)=>Number(num)).sort((a,b)=>a-b)

//풀이 2 RegExp로 풀이
const solution = (my_string) => my_string.match(/\d/g).sort((a, b) => a - b).map(n => Number(n));


❓응용문제 2 (모음 제거)

코딩테스트 연습 - 모음 제거

문제 설명

영어에선 a, e, i, o, u 다섯 가지 알파벳을 모음으로 분류합니다. 문자열 my_string이 매개변수로 주어질 때 모음을 제거한 문자열을 return하도록 solution 함수를 완성해주세요.


제한사항

  • my_string은 소문자와 공백으로 이루어져 있습니다.
  • 1 ≤ my_string의 길이 ≤ 1,000

입출력 예

my_stringresult
"bus""bs"
"nice to meet you""nc t mt y"

입출력 예 #1

  • "bus"에서 모음 u를 제거한 "bs"를 return합니다.

입출력 예 #1

  • "nice to meet you"에서 모음 i, o, e, u를 모두 제거한 "nc t mt y"를 return합니다.

풀이

const solution = (my_string) => my_string.replace(/['a','e','i','o','u']/g,'')
const solution = (my_string) => my_string.replace(/[aeiou]/g,'')


📍 Reference

https://inpa.tistory.com/entry/JS-📚-정규식-RegExp-누구나-이해하기-쉽게-정리

Reular expressions - JavaScript | MDN

0개의 댓글