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 : 여러 줄 상태 ^는 줄의 시작이나 문자열의 시작에 매치되고, $는 줄의 끝이나 문자열의 끝에 매치된다.
search()
이 메서드는 정규 표현식을 전달인자로 받아서 가장 처음 매칭되는 부분 문자열의 위치를 반환하고
, 매칭되는 부분 문자열이 없다면 -1을 반환한다.
- 정규표현식에서 g 플래그가 있으면 무시한다.
replace()
이 메서드는 찾아서 바꾸기 작업을 수행한다.
- 정규 표현식에 g 플래그가 설정되어 있으면 문자열내에서 패턴에 매치되는 무든 부분 문자열을 교체할 문자열로 바꾼다.
- 정규 표현식에서 괄호로 묶인 부분 표현식은 왼쪽에서 오른쪽으로 번호가 매겨지고, 각 부분 표현식과 매치된 텍스트를 기억한다.
만약 교체할 문자열에 $가 나오고 뒤따라 숫자가 나타나면 replace() 메서드는 $와 숫자를 부분 문자열에 매치된 텍스트로 바꾼다.match()
이 메서드는 정규 표현식을 유일한 전달인자로 받고 매치된 결과를 배열로 만들어 반환한다.
, 매칭되는 부분 문자열이 없다면 null을 반환한다.