상현에 하루하루
All 개발자의 하루

CamelCase를 KebabCase로 변경

( 업데이트: )

kebabize는 CamelCase 문자열을 kebab case로 변환하도록 하는 함수를 작성하십시오.

kebabize('camelsHaveThreeHumps') // camels-have-three-humps
kebabize('camelsHave3Humps') // camels-have-humps

반환 된 문자열은 소문자만 포함해야합니다.


function kebabize(str) {
  // 숫자 제거
  let instanceStr = str.replace(/[0-9]/g, '');
  instanceStr = instanceStr[0].toLowerCase() + instanceStr.substring(1);
  return instanceStr.replace(/([A-Z])/g, '-$1').toLowerCase();
}

여기서 모든 문자열에 대해서 정규식으로 변환했는데 그러면 첫 문자열이 대문자일 경우에도 -$1로 지정되어 버려서 instanceStr에서 첫 문자열만 먼저 빼내서 저장했는데 정규식 자체에서 첫번째 글자를 선택해서 해당 규칙을 검사하는 방법이 있었다.

function kebabize(str) {
  return str.replace(/[^a-z]/ig, '').
         replace(/^[A-Z]/, c => c.toLowerCase()).
         replace(/[A-Z]/g, c => `-${c.toLowerCase()}`);
}

.replace(/[^a-z]/ig, '') 문자열을 제외한 모든 대소문자를 구분하지 않는 것을 선택해서 제거한다.

.replace(/[^a-z]/ig, '') replace(/^[A-Z]/, c => c.toLowerCase()) 첫번째 글자가 소문자가 아니라면 소문자로 변경해라

정규식을 조금더 활용하면 짧고 이해하기 쉬운 코드로 만들 수 있다. 조금더 고민 해보자!