[Lv.0] 숨어있는 숫자의 덧셈 (1)

01수정·2022년 11월 16일
0
post-thumbnail

<입문 100문제> Day 12 - 문자열, 정렬, 사칙연산, 수학

문제


풀이

function solution (my_string) {
    return [...my_string.replace(/[^0-9]/g, '')].reduce((sum, num) => { return sum += +num }, 0)
}

해답

function solution(my_string) {
  return my_string.match(/[0-9]/g).reduce((a, c) => a + +c, 0);
}

해답풀이

문자열에서 숫자를 추출한 후 배열로 변환하는 처리과정에 차이가 있었다.
정규식 패턴과 플래그는 /[^0-9]/g 로 동일했으나,
내 풀이에서는 replace 로 정규식을 기반으로 '찾아서 바꾸기' 처리를 한 후, spread 연산자를 이용해 문자열을 배열로 변환하였으나,
해답에서는 match 로 정규 표현식을 기반으로 매치된 결과를 배열로 바로 변환하여 더욱 간결하게 처리하였다.

i : 대소문자를 구별하지 않는 매칭을 수행한다.
g : 전역 매칭을 수행한다. 즉, 첫 번째 매치에서 끝내지 않고 매치되는 모든 것을 찾는다.
m : 여러 줄 상태 ^는 줄의 시작이나 문자열의 시작에 매치되고, $는 줄의 끝이나 문자열의 끝에 매치된다.

  1. search()
    이 메서드는 정규 표현식을 전달인자로 받아서 가장 처음 매칭되는 부분 문자열의 위치를 반환하고
    , 매칭되는 부분 문자열이 없다면 -1을 반환한다.

    • 정규표현식에서 g 플래그가 있으면 무시한다.
  2. replace()
    이 메서드는 찾아서 바꾸기 작업을 수행한다.

    • 정규 표현식에 g 플래그가 설정되어 있으면 문자열내에서 패턴에 매치되는 무든 부분 문자열을 교체할 문자열로 바꾼다.
    • 정규 표현식에서 괄호로 묶인 부분 표현식은 왼쪽에서 오른쪽으로 번호가 매겨지고, 각 부분 표현식과 매치된 텍스트를 기억한다.
      만약 교체할 문자열에 $가 나오고 뒤따라 숫자가 나타나면 replace() 메서드는 $와 숫자를 부분 문자열에 매치된 텍스트로 바꾼다.
  3. match()
    이 메서드는 정규 표현식을 유일한 전달인자로 받고 매치된 결과를 배열로 만들어 반환한다.
    , 매칭되는 부분 문자열이 없다면 null을 반환한다.


참고자료

profile
새싹 FE 개발자

0개의 댓글