대문자 앞에 공백 삽입


96

나는 문자열이 "MySites"있습니다. My와 사이에 공백을두고 싶습니다 Sites.

jQuery 또는 JavaScript에서 어떻게 할 수 있습니까?


1
좀 더 자세히 설명해 주시겠습니까? 분리하려는 문자열의 일반적인 형식은 무엇입니까? 그 문자열이 하나뿐이라면 공백을 수동으로 입력하지 않는 이유는 무엇입니까?
Pointy

2
더 정확하게하십시오, 나는 누군가가 당신이 요구하는지 이해할 수 있다고 생각하지 않습니다
클레멘트 Herreman

1
일치해야하는 패턴을 정의하십시오. 예를 들어 "문자열에서 'My'를 찾을 때 공백"또는 "첫 문자가 아닌 경우 각 대문자 앞에 공백 추가"또는 ....
JohnSmith

"MySites 사이". 한 가지 사이에 공간을 어떻게 둘 수 있습니까? "내 사이트"를 출력으로 원한다고 가정합니다.
Rocket Hazmat 2011

#meagar-멋진 댓글 (풍자). 좋은 말이 없으면 아무 말도하지 않는다고 배운 적이 없습니까?
carinlynchin 2015

답변:


167

모든 대문자 앞에 공백을 추가하고 선행 및 후행 공백을 제거 할 수 있습니다.

s = s.replace(/([A-Z])/g, ' $1').trim()

이것은 "1AndAbove"에서도 작동합니다. 다른 솔루션은 그렇지 않습니다. 감사!!
desaivv

1
두문자어의 경우 "실패"합니다. 두 개 이상의 연속 된 대문자가 작동하지 않도록 어떻게 방지 할 수 있습니까?
Toni Michel Caubet

4
@ToniMichelCaubet 쉽게, 다음과 같이 정규식을 수정하십시오 : /([A-Z]+)/g. +는 가능한 한 많은 연속 대문자와 일치하는지 확인합니다.
iFreilicht

이 코드에서 '[AZ]'를 둘러싸는 데 사용하는 괄호가 필요한 이유는 무엇입니까?
Kristina Bressler jul.

@Kristina 괄호는 '나는 변수입니다'라고 말합니다. 괄호가 없으면 'MySites'에 대해 '$ 1y $ 1ites'라는 답이 생성됩니다.
user2051552

128

그러면 소문자와 대문자가 나오는 각 항목을 찾아 그 사이에 공백을 삽입합니다.

s = s.replace(/([a-z])([A-Z])/g, '$1 $2');

2 개의 연속 된 대문자가 발생하는 특수한 경우 (예 : ThisIsATest) 아래에 추가 코드를 추가하십시오.

 s = s.replace(/([A-Z])([A-Z])/g, '$1 $2');

3
경고 일뿐입니다. "ThisIsATest"라는 단일 문자에 대해 실패하면 "This Is ATest"가됩니다.
Ceres

3
@Ceres : 좋은 지적입니다. 이 경우는 첫 번째 문자가 아닌 대문자 앞에 공백을 삽입하여 처리 할 수 ​​있지만 "RunThisSQLQuery".
Guffa 2014

1
"ThisIsATest"의 경우-( 'RunThisSQLQuery'를 계산하지 않음) 다음과 같이 할 수 있습니다. str.replace (/ ([AZ]) / g, '$ 1'). trim ()
carinlynchin

훌륭한! 감사!
Ami Schreiber

21

현재 허용되는 답변에 약간의 수정을 제안 할 수 있습니까?

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

이는 다음을 의미합니다.

ACROText -> ACRO Text
UserNameTest -> User Name Test

db 열 이름을 다루는 경우 약간 더 유용 할 수 있습니다 (그리고 일부에 대해 약어를 사용하는 경우)


1
이것은 내가 필요한 것에 완벽하게 작동합니다. 대문자 사이에 공백을 완벽하게 추가했지만 두문자어는 함께 유지했습니다.
mighty_mite

6

앞에 대문자가없는 각 대문자 사이에 공백을 삽입해야합니다.

var myString = "MySites"
var newString = "";
var wasUpper = false;
for (var i = 0; i < myString.length; i++)
{
    if (!wasUpper && myString[i] == myString.toUpperCase()[i])
    {
        newString = newString + " ";
        wasUpper = true;
    }
    else
    {
        wasUpper = false;
    }
    newString = newString + myString[i];
}

newString당신이 원하는 가치를 가질 것입니다. 또한 regex를 사용하여 코드를 단축하려면 Javascript camelCase에서 Regular Form으로 다음 코드를 사용할 수 있습니다.

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


2

여기에 몇 가지 답변을 기반으로 문자열을 제목 케이스로 변환하는 데 사용한 결과가 있습니다.

str = str
  .replace(/(_|-)/g, ' ')
  .trim()
  .replace(/\w\S*/g, function(str) {
    return str.charAt(0).toUpperCase() + str.substr(1)
  })   
  .replace(/([a-z])([A-Z])/g, '$1 $2')
  .replace(/([A-Z])([A-Z][a-z])/g, '$1 $2')   

다음은 문자열을 테스트하여 이것이 요구 사항을 충족하는지 확인할 수있는 JSFiddle입니다. https://jsfiddle.net/thomastasa/5236dv8t/85/


예 :

  • "yourStringHere"-> "여기에 문자열"
  • "AnotherStringHere"-> "여기에 또 다른 문자열"
  • "someones_string"-> "Someones String"
  • "Another-String-Here"-> "Another String Here"
  • "myAWESOMEString"-> "My AWESOME String"

1

String#split()대문자 알파벳 ( [A-Z])과 Array#join()공백이있는 배열에 대해 및 미리보기를 사용할 수 있습니다 .

let stringCamelCase = "MySites";

let string = stringCamelCase.split(/(?=[A-Z])/).join(" ");

console.log(string)

또는 문자열 개체 함수로 :

String.prototype.cC2SC = function() {
  return this.split(/(?=[A-Z])/).join(" ");
}

console.log("MyCamelCase".cC2SC());


1

단일 정규식에서 문자 [a-z]또는 [A-Z].

const str = "MySites";
str.replace(/(?<!^)([A-Z])/, " $1"); // -> "My Sites"

(?<!^) 여기에서 뒤의 모습에 대해 자세히 확인할 수 있습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.