2013-03-11 2 views
4

"Light Purple"및 "DarkRed"로 저장된 "Light Purple"및 "Dark Red"와 같은 단어가 있습니다. "LightPurple"과 같은 단어의 대문자를 확인하고 "Light"과 "Purple"이라는 단어 사이에 공백을 넣어 "Light Purple"이라는 단어를 형성하려면 어떻게해야합니까? 도움두 단어 사이에 공백 추가

+9

"LightPurple".replace (/ ([a-z]) /, '$ 1 $ 2')'? –

+0

답변으로 추가해야합니다 @RocketHazmat;) – Simon

+1

[** This **] (https://xkcd.com/208/)가 방금 발생했습니다. – andyb

답변

10

대문자 옆에 소문자가있을 때마다 공백을 추가 할 수 있습니다. 이 같은

뭔가 :

"LightPurple".replace(/([a-z])([A-Z])/, '$1 $2') 

UPDATE : 당신이 2 개 이상의 단어를 가지고 있다면, 당신은 그들 모두를 일치는 g 플래그를 사용해야합니다.

"LightPurpleCar".replace(/([a-z])([A-Z])/g, '$1 $2') 

업데이트 2 : CSVFile 같은 단어를 분할하려는 경우, 당신은 대신 정규식을 사용할 필요가 있습니다

"CSVFilesAreCool".replace(/([a-zA-Z])([A-Z])([a-z])/g, '$1 $2$3') 
+0

@Hazmat, 여전히이 정규 표현식은 내 "CCV 코드"에 대해 "CCV 코드"와 관련해서는 필요하지 않으므로 RE가이 문제를 해결하기 위해 좀 더 조정할 필요가 있다고 생각합니다. 그러나, 내 사용자 지정 자바 스크립트는 이러한 예제를 다룹니다. 나는 너의 바로 아래에 내 대답을 가지고있다. 추신 : 나는 당신의 대답을 투표했습니다 :) – KMX

+0

@ KMX : 예, 정규식이 완벽하지는 않지만 OP의 경우 충분히 좋을 수 있습니다. –

+0

@KMX : 업데이트를 시도했습니다. 그게 효과가있는 것처럼 보입니다. :) –

0

당신은 대문자의 문자열을 각 문자를 비교할 수 사전에

감사합니다.

function splitAtUpperCase(input){ 
    var uppers = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
    //start at 1 because 0 is always uppercase 
    for (var i=1; i<input.length; i++){ 
     if (uppers.indexOf(input.charAt(i)) != -1){ 
     //the uppercase letter is at i 
     return [input.substring(0,i),input.substring(i,input.length)]; 
     } 
    } 
} 

출력은 첫 번째와 두 번째 단어가있는 배열입니다.

1

좋아, 내 경험을 공유. 이 언어는 다른 언어로도 구현되어 있습니다.

다음
var camelCase = "LightPurple"; 
var tmp = camelCase[0]; 
for (i = 1; i < camelCase.length; i++) 
{ 
    var hasNextCap = false; 
    var hasPrevCap = false; 

    var charValue = camelCase.charCodeAt(i); 
    if (charValue > 64 && charValue < 91) 
    { 
     if (camelCase.length > i + 1) 
     { 
      var next_charValue = camelCase.charCodeAt(i + 1); 
      if (next_charValue > 64 && next_charValue < 91) 
       hasNextCap = true; 
     } 

     if (i - 1 > -1) 
     { 
      var prev_charValue = camelCase.charCodeAt(i - 1); 
      if (prev_charValue > 64 && prev_charValue < 91) 
       hasPrevCap = true; 
     } 


     if (i < camelCase.length-1 && 
      (!(hasNextCap && hasPrevCap || hasPrevCap) 
      || (hasPrevCap && !hasNextCap))) 
      tmp += " "; 
    } 
    tmp += camelCase[i]; 
} 

demo입니다 : 당신이 시도 할 수 있도록 당신을 위해 난 그냥 예제를 통해 자바 스크립트 버전을 만들었습니다.

관련 문제