function solution(numbers) {
let answer = numbers
.replace(/zero/g, 0)
.replace(/one/g, 1)
.replace(/two/g, 2)
.replace(/three/g, 3)
.replace(/four/g, 4)
.replace(/five/g, 5)
.replace(/six/g, 6)
.replace(/seven/g, 7)
.replace(/eight/g, 8)
.replace(/nine/g, 9);
return Number(answer);
}
정규표현식과 플래그 g 로 numbers 내의 문자열 zero ~ nine 을
중복되는 값까지 모두 변환해줄 값으로 가져와준다.
replace 를 사용해 numbers 로 받은 문자열 zero ~ nine 을
각각 0 ~ 9 로 변환해주었다.
최종 return 값에 Number 를 붙여 문자열을 숫자로 변환해준다.
function solution(numbers) {
let answer = numbers
.replace(/zero/, 0)
.replace(/one/, 1)
.replace(/two/, 2)
.replace(/three/, 3)
.replace(/four/, 4)
.replace(/five/, 5)
.replace(/six/, 6)
.replace(/seven/, 7)
.replace(/eight/, 8)
.replace(/nine/, 9);
return Number(answer);
}
매치되는 모든 값을 반환하는 플래그 g를 쓰지 않아서
만약 oneone 처럼 같은 숫자가 두번 이상 겹치게 되면,
첫번째 one 만 반환해 변환하므로 1one 이렇게 반환되어서 틀린 값이 나온다.
function solution(numbers) {
const obj = {
zero: 0, one: 1, two: 2, three: 3, four: 4,
five: 5, six: 6, seven: 7, eight: 8, nine: 9
};
const num = numbers.replace(/zero|one|two|three|four|five|six|seven|eight|nine/g, (v) => {
return obj[v];
});
return Number(num);
}
(|) 연산자를 활용해서 regexp의 pattern 사이 사이에 넣어주면 다수의 pattern을 한번에 사용.
각각의 pattern 을 flags 내의 함수의 인수로 받는다.
각 인수를 obj 객체의 key 값으로 받아 value를 return 해준다.
최종 return 값에 Number 를 붙여 문자열을 숫자로 변환해준다.
[정규표현식]
정규 표현식(‘regexp’ 또는 'reg’라고 줄여서 사용)은 패턴(pattern) 과 선택적으로 사용할 수 있는 플래그(flag) 로 구성됩니다.
1) 긴 문법
regexp = new RegExp("pattern", "flags");
2) 짧은 문법
regexp = /pattern/; // 플래그가 없음
regexp = /pattern/gmi; // 플래그 g, m, i가 있음(각 플래그에 대해선 곧 다룰 예정)
[플래그 g]
g 플래그가 붙으면 패턴과 일치하는 모든 것들을 찾습니다.
g 플래그가 없으면 패턴과 일치하는 첫 번째 결과만 반환됩니다.
[(|) operator ]
정규표현식 내부에서 쓰이는 or 연산자
참고)
모던자바스크립트 - 패턴과 플래그
stackoverflow - (|) operator
mdn - replace