Complete the method/function so that it converts dash/underscore delimited words into camel casing. The first word within the output should be capitalized only if the original word was capitalized (known as Upper Camel Case, also often referred to as Pascal case).
"the-stealth-warrior"
gets converted to "theStealthWarrior""The_Stealth_Warrior"
gets converted to "TheStealthWarrior"
function toCamelCase(str){
let array = [];
if(str.includes('-')) {
array = str.split('-');
}
else if(str.includes('_')) {
array = str.split('_');
}
else {
array.push(str);
}
for(i=1;i<array.length;i++) {
const key = array[i][0].toUpperCase();
const arrayUpper = array[i].split('');
arrayUpper[0] = key;
array[i] = arrayUpper.join('');
}
array.join('');
return array.join('');
}
코드를 보면 알수 있지만, 나는 다음과 같은 과정을 거쳤다.
문자열을 기준이 되는 기호를 기준으로 나누어 배열에 저장
ex) [the, stealth, warrior]
배열의 각 문자열들 중에 수정해야하는 문자열은 배열로 변환
ex) 'stealth' → [s,t,e,a,l,t,h]
해당 배열의 첫문자를 대문자로 수정
[s,t,e,a,l,t,h] → [S,t,e,a,l,t,h]
배열을 다시 합친다.
[S,t,e,a,l,t,h] → 'Stealth'
전체를 다시 합친 후 배열을 문자열로 변환
[the,Stealth,Warrior] →'theStealthWarrior'
이렇게 복잡한 공정을 거치는 가장 큰 이유는 문자열이 immutable object여서 조작이 불가능하다. 그래서 배열로 고친뒤에 다시 문자열로 돌아오는 과정을 추가하였다.
function toCamelCase(str){
var regExp=/[-_]\w/ig;
return str.replace(regExp,function(match){
return match.charAt(1).toUpperCase();
});
}
정규표현식 유용한 사이트
[-_]\w
-와 _ 중 어느것을 포함하는 것중에 뒤에 알파벳이 딸려있는 것
ig
case insensitive & 해당되는 전부 다 찾기
string.replace(regexp|substr, newSubstr|function)
일치하는 일부 또는 모든 부분이 교체된 새로운 문자열을 반환한다.
regexp를 첫 인자로 준 경우에 위와 같이 두번째 인자를 함수로 두면 함수의 인자로 해당 regexp에 해당하는 것들이 들어간다. 플래그로 g를 사용한 경우, 매치될때마다 함수는 호출된다.
charAt(index)
문자열에서 해당 인덱스에 위치하는 단일 문자를 반환