오늘 뭐했냐/기억하면 좋을 문제들

모음 제거 - 정규표현식

스스로에게 2023. 5. 27. 17:20

영어에선 a, e, i, o, u 다섯 가지 알파벳을 모음으로 분류합니다. 문자열 my_string이 매개변수로 주어질 때 모음을 제거한 문자열을 return하도록 solution 함수를 완성해주세요.

function solution(my_string) {
    let a = my_string.replaceAll('a',"");
    let e = a.replaceAll('e',"");
    let i = e.replaceAll('i',"");
    let o = i.replaceAll('o',"");
    let u = o.replaceAll('u',"");
    return u;
}

한 글자씩 .replaceAll()을 통해 지우는 방법으로 어떻게든 풀었다 

다른 사람들의 풀이를 보자

function solution(my_string) {
    return Array.from(my_string).filter(t => !['a', 'e', 'i', 'o', 'u'].includes(t)).join;
	
    //  Array.from() 유사 배열 객체를 배열로 바꿔준다
    // .filter()로 각 요소를 검사 콜백함수의 값이 true인 경우에만 
    // 전달된 요소가 t가 새로운 배열 안에 들어가고 이를 통해 새로운 배열을 생성   
    
    // [...].includes(t) 주어진 배열에 특정 값 t가 있는지 boolean값으로 반환 
    
    // Array.from(hello) -> ["h", "e", "l", "l", "o"] 
    // ["h", "e", "l", "l", "o"]가 하나씩 전달되어 
    // !['a', 'e', 'i', 'o', 'u'].includes(t))에서 
    // true인 결과가 나오는 t값만을 모아 새로운 배열을 생성
    
    // !가 붙어있기에 ['a', 'e', 'i', 'o', 'u'] 안에 t랑 같은 값이 있다면 false로 바뀐다
    // 따라서 ['a', 'e', 'i', 'o', 'u']가 없는 값만을 선별한 새로운 배열을 생성
    
    // join("") 로 다시 풀어서 문자열로 바꾼다 
}

한참을 보고 말로 이렇게 글로 해석해서 쓸 수 있는데까지 시간이 좀 걸렸다 

function solution(my_string) {
    return my_string.replace(/[aeiou]/g, '');
}
// replace() 특정 문자를 대체해 다른 문자로 바꾼다
// 정규표현식에서 [ab]안에 문자들이 a||b로 작동됨
// /g는 전역 검색 
// '' 앞에 찾은 문자들을 대체할 문자

정규표현식을 안다면 이게 훨씬 더 이해하기 쉬울 것 같다