JavaScript: 将驼峰式命名转换为句子

4

我发现此示例可以将CamelCase转换为Dashes。 我修改了代码,将CamelCase更改为Sentencecase,使用空格而不是破折号。 它运行良好,但对于单个字母,如“i”和“a”,无法正常工作。 有什么想法可以解决这个问题吗?

  • thisIsAPain --> This is a pain

    var str = "thisIsAPain"; 
    str = camelCaseToSpacedSentenceCase(str);
    alert(str)
    
    function camelCaseToSpacedSentenceCase(str)
    {
        var spacedCamel = str.replace(/\W+/g, " ").replace(/([a-z\d])([A-Z])/g, "$1 $2");
        spacedCamel = spacedCamel.toLowerCase();
        spacedCamel = spacedCamel.substring(0,1).toUpperCase() + spacedCamel.substring(1,spacedCamel.length)
        return spacedCamel;
    }
    

2
这是您的第12个问题(除了17个答案),现在您应该正确地格式化内容。当您输入问题时,右侧有一个方便的如何格式化框。下面还有一个预览区域。 - T.J. Crowder
糟糕!那是我的错误。我知道代码格式化,但我必须记得在用“\n ”替换所有内容之前在代码顶部添加新行。 - Ghoul Fool
3个回答

19

最新版本:

"thisIsNotAPain"
    .replace(/^[a-z]|[A-Z]/g, function(v, i) {
        return i === 0 ? v.toUpperCase() : " " + v.toLowerCase();
    });  // "This is not a pain"

旧解决方案:

"thisIsAPain"
    .match(/^(?:[^A-Z]+)|[A-Z](?:[^A-Z]*)+/g)
    .join(" ")
    .toLowerCase()
    .replace(/^[a-z]/, function(v) {
        return v.toUpperCase();
    });  // "This is a pain"

console.log(
    "thisIsNotAPain"
        .replace(/^[a-z]|[A-Z]/g, function(v, i) {
            return i === 0 ? v.toUpperCase() : " " + v.toLowerCase();
        })  // "This is not a pain" 
);

console.log(
    "thisIsAPain"
        .match(/^(?:[^A-Z]+)|[A-Z](?:[^A-Z]*)+/g)
        .join(" ")
        .toLowerCase()
        .replace(/^[a-z]/, function(v) {
            return v.toUpperCase();
        })  // "This is a pain"
);


1
这速度太快了!真美妙的事情。希望有一天我能拥有更强大的脑力,解读其中的所有东西。 - Ghoul Fool
@GhoulFool 我确信你可以更快地完成它 ;) - VisioN
有一天,我只是一个4级的RegExp巫师。很快我就会升到5级,可以使用单词列表并把猫变成蝙蝠。 - Ghoul Fool

3
将您的函数的第一行更改为:
var spacedCamel = str.replace(/([A-Z])/g, " $1");

2

算法如下:

  1. 在所有大写字母前添加空格。
  2. 去除所有尾部和首部的空格。
  3. 将第一个字符大写。

Javascript 代码:

function camelToSpace(str) {
    //Add space on all uppercase letters
    var result = str.replace(/([A-Z])/g, ' $1').toLowerCase();
    //Trim leading and trailing spaces
    result = result.trim();
    //Uppercase first letter
    return result.charAt(0).toUpperCase() + result.slice(1);
}

请参考此链接

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接