Return the number (count) of vowels in the given string.
We will consider a, e, i, o, and u as vowels for this Kata.
The input string will only consist of lower case letters and/or spaces.
🚩 문제해석
주어진 문자열의 모음의 개수를 구하시오.
function getCount(str) {
var vowelsCount = 0;
return str.split('').reduce((vowelsCount,char)=>{
if(char === 'a' || char === 'e' || char === 'i' || char === 'o' || char === 'u') vowelsCount++;
return vowelsCount;
}, 0);
}
점점 reduce() 메소드에 익숙해지는 것 같아서 뿌듯하다. 안쓰던 것들을 의도적으로 사용하다보면 뭔가 내가 성장하는 기분이 든다. 그냥 자기만족일 수도...😅 위 풀이는 문자열을 배열화(by split() 메소드)한 후에 reduce()를 통해서 배열의 요소 안에 모음을 확인해서 누적값(=총 모음의 개수)를 구한 것이다.
뭔가 내가 생각한 풀이보다 직관적인(?) 풀이가 있을거라는 생각을 했지만 , 그것이 정규표현식
이라고는 생각지 못했다. 아마도 그 이유는 내가 한번도 정규표현식
을 사용해서 문제를 접근한 적이 없어서가 아닐까. '따로 정리를 해야지' 라는 생각만 할 뿐 실천하지 못한 나의 의지박약 문제라 자책하는 중. 그래서 문제를 풀면서 나오는 것들만이라도 챙겨가자는 생각에 이 문제에서 나온 정규표현식들에 대해서 정리해본다.
이 문제에서는 2가지 패턴의 정규표현식이 나타났다. 모음(a,e,i,o,u)인 것들을 직접 찾는 것과 모음이 아닌 것들을 제거하는 방법이다.
function getCount(str) {
return (str.match(/[aeiou]/ig)||[]).length;
}
str.match(정규표현식) : 문자열이 정규표현식과 매치되는 부분을 검색한다. 문자열과 정규식이 일치하는 부분을 첫번째 요소로 담은
Array
를 반환한다. 일치하는 값이 없으면null
을 반환한다.const str = 'kkkesddwasdasd'; str.match(/[aeiou]/i); /* output: [ 'e', index: 3, input: 'kkkesddwasdasd', groups: undefined ] */
기본적으로 정규표현식과 매치되는 첫번째 문자열의 여러가지 정보를 담은 배열을 리턴한다. 단, 정규표현식의
g
flag와 함께 사용되면 매치되는 모든 문자열을 담은 배열을 리턴한다.
ignore case
를 의미하며 대상 문자열에 대해서 대/소문자를 식별하지 않는 것을 의미global
를 의미하며 대상 문자열내에 모든 패턴들을 검색하는 것을 의미 function getCount(str) {
return str.replace(/[^aeiou]/gi, '').length;
}
str.replace(정규표현식, 바꿀문자열) : 정규표현식과 일치는 문자열을 바꿀문자열로 치환한 새로운 문자열로서 반환한다. 기존의 문자열은 바뀌지 않는다.
문제 풀이에 사용된 몇 가지의 정규표현식에 대해서 알아봤다. 이 외에서 여러가지 표현과 패턴들이 존재했다. 이러한 패턴들이 있다는 것만 알아도 나중에 정규식과 관련된 메소드를 사용할 때, 찾아보면서 사용할 수 있을 것 같다. 이러한 종류의 지식들은 있다는 것을 아는 것과 어떤 키워드로 빠르게 찾아서 사용하는 것이 중요하다. 그러기 위해서 익숙해져야만 하겠다.
MDN String.prototype.match()
MDN 정규표현식
정규표현식(Regex)정리_하마블로그
🚀 문제를 풀어나갈 때 생각의 흐름을 정리합니다. 또한 새로운 풀이에 대한 코드를 분석하고 모르는 부분에 대해서 정리합니다. 생각이 다른 부분에 대한 피드백은 언제나 환영합니다. 틀린 내용에 대한 피드백 또한 항상 감사합니다.