[javascript] 하이픈을 낙타 케이스로 변환 (camelCase)
정규식 (나는 가정) 또는 다른 방법으로 다음과 같은 것을 어떻게 변환 할 수 있습니까?
marker-image
나 my-example-setting
에게 markerImage
또는 myExampleSetting
.
나는 -
그 hypen +1의 색인을 대문자로 변환하여 나누는 것에 대해 생각하고있었습니다 . 그러나 그것은 더러워 보였고 코드를 깨끗하게 만들 수있는 정규 표현식에 대한 도움을 원했습니다.
jQuery가 없습니다 …
답변
이 시도:
var camelCased = myString.replace(/-([a-z])/g, function (g) { return g[1].toUpperCase(); });
정규식은 -i
in marker-image
과 일치하고 만 캡처합니다 i
. 그런 다음 콜백 함수에서 대문자로 대체됩니다.
답변
이것은 당신이 깨달았고 프로젝트에 포함되어 있다면 Lodash가 제공 하는 훌륭한 유틸리티 중 하나입니다 .
var str = 'my-hyphen-string';
str = _.camelCase(str);
// results in 'myHyphenString'
답변
하이픈과 다음 문자를 가져 와서 대문자의 문자 버전으로 바꿀 수 있습니다.
var str="marker-image-test";
str.replace(/-([a-z])/g, function (m, w) {
return w.toUpperCase();
});
답변
내 camelCase 함수 버전은 다음과 같습니다.
var camelCase = (function () {
var DEFAULT_REGEX = /[-_]+(.)?/g;
function toUpper(match, group1) {
return group1 ? group1.toUpperCase() : '';
}
return function (str, delimiters) {
return str.replace(delimiters ? new RegExp('[' + delimiters + ']+(.)?', 'g') : DEFAULT_REGEX, toUpper);
};
})();
다음과 같은 경우를 모두 처리합니다.
- 기본적으로 밑줄과 하이픈을 모두 처리합니다 (두 번째 매개 변수로 구성 가능).
- 유니 코드 문자가 포함 된 문자열
- 하이픈 또는 밑줄로 끝나는 문자열
- 연속적인 하이픈 또는 밑줄이있는 문자열
라이브 테스트 링크는 다음과 같습니다. http://jsfiddle.net/avKzf/2/
테스트 결과는 다음과 같습니다.
- 입력 : “ab-cd-ef”, 결과 : “abCdEf”
- 입력 : “ab-cd-ef-“, 결과 : “abCdEf”
- 입력 : “ab-cd-ef–“, 결과 : “abCdEf”
- 입력 : “ab-cd–ef–“, 결과 : “abCdEf”
- 입력 : “–ab-cd–ef–“, 결과 : “AbCdEf”
- 입력 : “–ab-cd -__- ef–“, 결과 : “AbCdEf”
구분 기호로 시작하는 문자열은 처음에 대문자로 나타납니다. 이것이 예상과 다르면 언제든지 lcfirst를 사용할 수 있습니다. 필요한 경우 내 lcfirst가 있습니다.
function lcfirst(str) {
return str && str.charAt(0).toLowerCase() + str.substring(1);
}
답변
이것은 RegExp
나에게 비명을 지르지 않습니다 . 개인적으로 간단한 문자열 및 배열 메소드로 충분할 때 정규 표현식을 피하려고합니다.
let upFirst = word =>
word[0].toUpperCase() + word.toLowerCase().slice(1)
let camelize = text => {
let words = text.split(/[-_]/g) // ok one simple regexp.
return words[0].toLowerCase() + words.slice(1).map(upFirst)
}
camelize('marker-image') // markerImage
답변
여기에 몇 가지 답변을 결합하고 문자열에서 메소드를 만드는 또 다른 옵션이 있습니다.
if (typeof String.prototype.toCamel !== 'function') {
String.prototype.toCamel = function(){
return this.replace(/[-_]([a-z])/g, function (g) { return g[1].toUpperCase(); })
};
}
이런 식으로 사용 :
'quick_brown'.toCamel(); // quickBrown
'quick-brown'.toCamel(); // quickBrown
답변
// Turn the dash separated variable name into camelCase.
str = str.replace(/\b-([a-z])/g, (_, char) => char.toUpperCase());