Javascript 在两个单词之间加一个空格

Javascript 在两个单词之间加一个空格,javascript,Javascript,我有一些单词,比如“浅紫色”和“深红色”,它们被存储为“浅紫色”和“暗红色”。如何检查单词中的大写字母,如“LightPurple”,并在单词“Light”和“Purple”之间留出一个空格,形成单词“LightPurple” 提前感谢您的帮助您可以将每个字符与一串大写字母进行比较 function splitAtUpperCase(input){ var uppers = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; //start at 1 because

我有一些单词,比如“浅紫色”和“深红色”,它们被存储为“浅紫色”和“暗红色”。如何检查单词中的大写字母,如“LightPurple”,并在单词“Light”和“Purple”之间留出一个空格,形成单词“LightPurple”


提前感谢您的帮助

您可以将每个字符与一串大写字母进行比较

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)];
      }
   }
}
函数拆分大写(输入){
var uppers=“abcdefghijklmnopqrstuvxyz”;
//从1开始,因为0总是大写

对于(var i=1;i您可以使用正则表达式在大写字母旁边有小写字母的地方添加空格

大概是这样的:

"LightPurple".replace(/([a-z])([A-Z])/, '$1 $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')

好的,分享我的经验。我也有一些其他语言的实现,它工作得非常出色。我刚刚为您创建了一个javascript版本,并提供了一个示例,因此您可以尝试以下方法:

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];
}
var camelCase=“LightPurple”;
var tmp=camelCase[0];
对于(i=1;i64&&charValue<91)
{
如果(camelCase.length>i+1)
{
var next_charValue=camelCase.charCodeAt(i+1);
如果(下一个字符值>64&&下一个字符值<91)
hasNextCap=true;
}
如果(i-1>-1)
{
var-prev_charValue=camelCase.charCodeAt(i-1);
如果(上一个字符值>64&&上一个字符值<91)
hasPrevCap=true;
}
如果(i<1.1.1)&&
(!(hasNextCap和hasPrevCap | | hasPrevCap)
||(hasPrevCap&!hasNextCap)))
tmp+=”;
}
tmp+=camelCase[i];
}

以下是解决这个问题的方法。

我认为这绝对不是解决这个问题的最佳方法(从优化的角度来看)。但它确实有效:)

const createSpacesBetweenWords=(字符,索引)=>{
如果(char==char.toUpperCase()&&index>0){
返回`${char}`;
}
返回字符;
};
函数formatString(字符串){
返回字符串
.拆分(“”)
.map(创建单词之间的空格)
.加入(“”);
}
formatString('LightPurple');//返回一个新字符串,其中单词由空格分隔

希望这项工作:
“LightPurple”。替换(/([a-z])([a-z])/,“$1$2”)
?您应该添加这个作为刚刚发生的@RocketHazmat;)的答案。@Hazmat,这个正则表达式仍然不能满足我的需要,比如说这个“CCVCode”不会将字符串拆分为“CCV代码”因此,我认为RE需要更多的调整来解决这个问题。然而,我的自定义Javascript处理这样的示例。我的答案就在你的下面。PS:我已经投票给了你的答案:)@Hazmat:是的,是的,你几乎做到了,但你仍然错过了一件事(笑)“CSVFilesAreCoolButTXT”呢:)@andyb:KMX没有问题,他只是在和我开玩笑:)@andyb:(facepalm)是的,我确实有一个要求,但从regex的角度来看。我有一个javascript和/或另一种语言的实现(见我在这个问题中的答案).但是hazmat使用正则表达式的方式非常整洁,因此我值得采用它而不是30行代码。无论如何,我将发布一个新问题来解决这个问题,因为它值得知道答案。@andyb给你