[JavaScript] replace() 문자 변환 (프로그래머스 | 영어가 싫어요)

혜연·2023년 2월 12일
0

JavaScript

목록 보기
5/13
post-thumbnail

1. replace()

replace()는 문자열에서 내가 바꾸고 싶은 문자를 찾아서 다른 문자로 변환하는 메소드이다.
str.replace('찾을 문자','변경할 문자')

str = "가나다가가바사"
str = str.replace('가','나'); // "나나다가가바사"

위의 코드에서 str.replace('가','나');코드로 문자'가''나'로 변경했다. 하지만 결과를 보면 가장 앞의 '가'만 변경되고 그 이후의 '가'는 변경되지 않았다. 모든 '가'를 변환하기 위해선 어떻게 해야할까?

2. 모든 문자를 변환

문자열안의 해당 문자 모두 변경하고 싶을땐 아래 코드처럼 작성해주면 된다.

str = "가나다가가바사"
str = str.replace(/가/gi,'나');
console.log(str); // "나나다나나바사"

str.replace(/가/gi,'나');로 모든 '가'를 '나'로 변환할 수 있다.
g : global, 모든 문자를 변환
i : ignore, 대/소문자 다 무시하고 일치하는 문자열 찾기

만약, 여러 문자를 한 문자로 바꾸고 싶으면 아래코드처럼 작성해보자.

str = "가나다가가바사"
str = str.replace(/가|다|바|사/gi,'나');
console.log(str); // "나나나나나나나"

문자열 안의 모든 '가','다','바','사'를 모두 '나'로 변환해서 출력된 결과를 확인할 수 있다!!

3. 문제로 알아보기

[프로그래머스] '영어가 싫어요'

영어 문자열을 매개변수로 받아, 해당 문자열을 숫자로 변환해 반환해야 하는 문제이다. 문자열 "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()을 통해 문자열을 숫자로 변환해 주었다. 끝🤗

0개의 댓글