[javascript] “camelCase”를“Camel Case”로 변환하는 방법?

내가 좋아하는 뭔가를 설정하는 자바 스크립트 정규식 명령을 얻기 위해 노력했습니다 "thisString""This String"내가 가까이서 보는이 같은 결과 편지를 대체하지만, "Thi String"또는 "This tring". 어떤 아이디어?

문자를 대문자로 표기하는 단순성을 처리 할 수 ​​있음을 분명히하기 위해 RegEx만큼 강력하지 않으며 문제가있는 곳 "somethingLikeThis"으로 나눕니다 "something Like This".



답변

"thisStringIsGood"
    // insert a space before all caps
    .replace(/([A-Z])/g, ' $1')
    // uppercase the first character
    .replace(/^./, function(str){ return str.toUpperCase(); })

표시

This String Is Good


답변

특히 xmlHTTPRequest와 같은 일련의 대문자를 처리하는 데 유휴 관심이있었습니다. 나열된 함수는 “Xml HTTP Request”또는 “Xml HTTPRequest”를 생성하고, “Xml HTTP Request”를 생성합니다.

function unCamelCase (str){
    return str
        // insert a space between lower & upper
        .replace(/([a-z])([A-Z])/g, '$1 $2')
        // space before last upper in a sequence followed by lower
        .replace(/\b([A-Z]+)([A-Z])([a-z])/, '$1 $2$3')
        // uppercase the first character
        .replace(/^./, function(str){ return str.toUpperCase(); })
}

gist 에는 String.prototype 버전도 있습니다 .


답변

이것은 정규식 lookahead ( live demo ) 로 간결하게 수행 할 수 있습니다 .

function splitCamelCaseToString(s) {
    return s.split(/(?=[A-Z])/).join(' ');
}

( g(전역) 플래그가 필요 하다고 생각 했지만 이상하게 도이 특별한 경우는 아닙니다.)

lookahead를 with와 함께 사용 split하면 일치하는 대문자가 사용되지 않고 UpperCamelCase가 처리해야하는 경우 선행 공백을 처리하지 않습니다. 각각의 첫 글자를 대문자로 사용하려면 다음을 사용할 수 있습니다.

function splitCamelCaseToString(s) {
    return s.split(/(?=[A-Z])/).map(function(p) {
        return p.charAt(0).toUpperCase() + p.slice(1);
    }).join(' ');
}

map배열 방법은 ES5 기능입니다,하지만 당신은 여전히 함께 이전 버전의 브라우저에서 사용할 수 있습니다 MDC에서 일부 코드 . 또는 for루프를 사용하여 배열 요소를 반복 할 수 있습니다 .


답변

나는 이것이 간단한 낙타 케이스뿐만 아니라 연속 대문자를 처리 할 수 ​​있어야한다고 생각합니다.

예 : someVariable => someVariable이지만 ABCCode! = ABC Code입니다.

아래 정규식은 예제에서 작동하지만 camcelCase에서 약어를 나타내는 일반적인 예제입니다.

"somethingLikeThis"
    .replace(/([a-z])([A-Z])/g, '$1 $2')
    .replace(/([A-Z])([a-z])/g, ' $1$2')
    .replace(/\ +/g, ' ') => "something Like This"

"someVariableWithABCCode"
    .replace(/([a-z])([A-Z])/g, '$1 $2')
    .replace(/([A-Z])([a-z])/g, ' $1$2')
    .replace(/\ +/g, ' ') => "some Variable With ABC Code"

첫 번째 문자를 대문자로 바꾸려면 위와 같이 조정할 수도 있습니다.


답변

function spacecamel(s){
    return s.replace(/([a-z])([A-Z])/g, '$1 $2');
}

spacecamel ( ‘somethingLikeThis’)

// 반환 값 : 이와 같은


답변

Lodash 는 이것을 잘 처리합니다._.startCase()


답변

숫자도 처리하는 솔루션 :

function capSplit(str){
   return str.replace
      ( /(^[a-z]+)|[0-9]+|[A-Z][a-z]+|[A-Z]+(?=[A-Z][a-z]|[0-9])/g
      , function(match, first){
          if (first) match = match[0].toUpperCase() + match.substr(1);
          return match + ' ';
          }
       )
   }

여기에서 테스트했습니다 [JSFiddle, 라이브러리 없음. 시도하지 않은 IE]; 꽤 안정적이어야합니다.