replace()
는 문자열에서 내가 바꾸고 싶은 문자를 찾아서 다른 문자로 변환하는 메소드이다.
str.replace('찾을 문자','변경할 문자')
str = "가나다가가바사"
str = str.replace('가','나'); // "나나다가가바사"
위의 코드에서 str.replace('가','나');
코드로 문자'가'
를 '나'
로 변경했다. 하지만 결과를 보면 가장 앞의 '가'만 변경되고 그 이후의 '가'는 변경되지 않았다. 모든 '가'를 변환하기 위해선 어떻게 해야할까?
문자열안의 해당 문자 모두 변경하고 싶을땐 아래 코드처럼 작성해주면 된다.
str = "가나다가가바사"
str = str.replace(/가/gi,'나');
console.log(str); // "나나다나나바사"
str.replace(/가/gi,'나');
로 모든 '가'를 '나'로 변환할 수 있다.
g : global, 모든 문자를 변환
i : ignore, 대/소문자 다 무시하고 일치하는 문자열 찾기
만약, 여러 문자를 한 문자로 바꾸고 싶으면 아래코드처럼 작성해보자.
str = "가나다가가바사"
str = str.replace(/가|다|바|사/gi,'나');
console.log(str); // "나나나나나나나"
문자열 안의 모든 '가','다','바','사'
를 모두 '나'
로 변환해서 출력된 결과를 확인할 수 있다!!
영어 문자열을 매개변수로 받아, 해당 문자열을 숫자로 변환해 반환해야 하는 문제이다. 문자열 "onetwo"를 받아서 "12"로 변환해야 한다.
오늘 배운 replace()를 사용해 문제를 풀어보자.
function solution(numbers) {
var answer = 0;
answer = numbers.replace(/zero/gi,'0').replace(/one/gi,'1')
.replace(/two/gi,'2').replace(/three/gi,'3').replace(/four/gi,'4')
.replace(/five/gi,'5').replace(/six/gi,'6').replace(/seven/gi,'7')
.replace(/eight/gi,'8').replace(/nine/gi,'9');
return Number(answer);
}
replace()를 통해 zero를 찾아서 0으로, one을 찾아서 1로, ... , nine을 찾아서 9로 변환하고, Number()을 통해 문자열을 숫자로 변환해 주었다.
요래 무식하게 0부터 9까지 replace를 일일이 작성했고.. 적으면서 분명 이걸 줄여서 제출해야 될 것 같았지만 생각을 멈추고 제출해버렸다😅
다른분들 코드를 보면서 경악을 금치 못하고 다시 코드를 이쁘게 정리해봤다.
function solution(numbers) {
var answer = 0;
const num = {
zero : '0', one:'1', two:'2', three:'3', four:'4', five:'5', six:'6',
seven:'7',eight:'8', nine:'9'
}
answer = numbers.replace(/zero|one|two|three|four|five|six|seven|eight|nine/gi,
(v) => {return num[v];})
return Number(answer);
}
객체를 사용하는 것이 제일 간단해서 위의 코드처럼 다시 작성했다.
num 객체에 키와 값으로 문자열에 해당하는 숫자를 지정하고, 객체의 키로 값에 접근해서 변환하는 방법을 사용했다.
'zero'를 찾으면 num['zero'] == '0'으로 변환한 것이다! 마지막은 역시 Number()을 통해 문자열을 숫자로 변환해 주었다. 끝🤗