[javascript] 모든 문자열을 낙타 케이스로 변환

Javascript 정규식을 사용하여 문자열을 낙타 케이스로 변환하는 방법은 무엇입니까?

EquipmentClass name또는
Equipment className또는 equipment class name또는Equipment Class Name

모두가되어야한다 : equipmentClassName.



답변

코드를 보면 두 번의 replace호출 만으로 코드를 얻을 수 있습니다 .

function camelize(str) {
  return str.replace(/(?:^\w|[A-Z]|\b\w)/g, function(word, index) {
    return index === 0 ? word.toLowerCase() : word.toUpperCase();
  }).replace(/\s+/g, '');
}

camelize("EquipmentClass name");
camelize("Equipment className");
camelize("equipment class name");
camelize("Equipment Class Name");
// all output "equipmentClassName"

편집 : 또는 한 번의 replace호출로에서 공백을 캡처합니다 RegExp.

function camelize(str) {
  return str.replace(/(?:^\w|[A-Z]|\b\w|\s+)/g, function(match, index) {
    if (+match === 0) return ""; // or if (/\s+/.test(match)) for white spaces
    return index === 0 ? match.toLowerCase() : match.toUpperCase();
  });
}


답변

누군가 lodash를 사용 하는 경우 _.camelCase()기능이 있습니다.

_.camelCase('Foo Bar');
// → 'fooBar'

_.camelCase('--foo-bar--');
// → 'fooBar'

_.camelCase('__FOO_BAR__');
// → 'fooBar'


답변

방금이 작업을 마쳤습니다.

String.prototype.toCamelCase = function(str) {
    return str
        .replace(/\s(.)/g, function($1) { return $1.toUpperCase(); })
        .replace(/\s/g, '')
        .replace(/^(.)/, function($1) { return $1.toLowerCase(); });
}

여러 개의 replace 문을 연결하지 않으려 고했습니다. 내 기능에 $ 1, $ 2, $ 3가있는 곳. 그러나 이러한 유형의 그룹화는 이해하기 어렵고 크로스 브라우저 문제에 대한 귀하의 언급은 결코 생각하지 못했습니다.


답변

이 솔루션을 사용할 수 있습니다 :

function toCamelCase(str){
  return str.split(' ').map(function(word,index){
    // If it is the first word make sure to lowercase all the chars.
    if(index == 0){
      return word.toLowerCase();
    }
    // If it is not the first word only upper case the first char and lowercase the rest.
    return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase();
  }).join('');
}


답변

c amel C ase 를 얻으려면

ES5

var camalize = function camalize(str) {
    return str.toLowerCase().replace(/[^a-zA-Z0-9]+(.)/g, function(match, chr)
    {
        return chr.toUpperCase();
    });
}

ES6

var camalize = function camalize(str) {
    return str.toLowerCase().replace(/[^a-zA-Z0-9]+(.)/g, (m, chr) => chr.toUpperCase());
}

에 도착 C 아멜 S entence C ASE 또는 P의 ascal의 C의 ASE

var camelSentence = function camelSentence(str) {
    return  (" " + str).toLowerCase().replace(/[^a-zA-Z0-9]+(.)/g, function(match, chr)
    {
        return chr.toUpperCase();
    });
}

참고 :
악센트가있는 언어의 경우. 다음 À-ÖØ-öø-ÿ과 같이 정규식에 포함 하십시오
.replace(/[^a-zA-ZÀ-ÖØ-öø-ÿ0-9]+(.)/g


답변

Scott의 특정 사례에서 나는 다음과 같이 갈 것입니다 :

String.prototype.toCamelCase = function() {
    return this.replace(/^([A-Z])|\s(\w)/g, function(match, p1, p2, offset) {
        if (p2) return p2.toUpperCase();
        return p1.toLowerCase();
    });
};

'EquipmentClass name'.toCamelCase()  // -> equipmentClassName
'Equipment className'.toCamelCase()  // -> equipmentClassName
'equipment class name'.toCamelCase() // -> equipmentClassName
'Equipment Class Name'.toCamelCase() // -> equipmentClassName

정규식은 대문자로 시작하면 첫 문자와 공백 다음에 오는 알파벳 문자 (예 : 지정된 문자열에서 2 또는 3 회)와 일치합니다.

정규식을 /^([A-Z])|[\s-_](\w)/g정식으로 사용하면 하이픈과 밑줄 유형 이름도 나타납니다.

'hyphen-name-format'.toCamelCase()     // -> hyphenNameFormat
'underscore_name_format'.toCamelCase() // -> underscoreNameFormat


답변

function toCamelCase(str) {
  // Lower cases the string
  return str.toLowerCase()
    // Replaces any - or _ characters with a space 
    .replace( /[-_]+/g, ' ')
    // Removes any non alphanumeric characters 
    .replace( /[^\w\s]/g, '')
    // Uppercases the first character in each group immediately following a space 
    // (delimited by spaces) 
    .replace( / (.)/g, function($1) { return $1.toUpperCase(); })
    // Removes spaces 
    .replace( / /g, '' );
}

camelCase문자열에 JavaScript 함수를 찾으려고했는데 특수 문자가 제거되도록하고 싶었습니다 (그리고 위의 답변 중 일부가 무엇인지 이해하는 데 어려움이있었습니다). 이것은 cc young의 답변과 추가 된 주석 및 $ peci & l 문자 제거를 기반으로합니다.