3

我有一个像“word_count”这样的字符串。如何使用 JavaScript 以优雅的方式将其转换为“WordCount”?我的决定对我来说似乎太复杂了。我会非常感谢你的帮助。

4

10 回答 10

7
function titleCase(str)
{
    return str.split("_")
        .map(function (s) { return s.charAt(0).toUpperCase() + s.slice(1); })
        .join("");
}
于 2012-07-12T17:57:37.387 回答
4

看看这个。我不想在这里复制粘贴所有内容,但这似乎正是您要寻找的。

这是修改以适应您的要求的功能:

String.prototype.toCamel = function(){
    return this.replace(/((^|\_)[a-z])/g, function($1){
                return $1.toUpperCase().replace('_','');});
};

在这里,它正在发挥作用。

于 2012-07-12T17:51:31.150 回答
3

您可以使用正则表达式匹配字符串开头的字母或下划线后的字母,并使用回调将字母转换为大写:

s = s.replace(/(?:^|_)([a-z])/g, function(m, g){
  return g.toUpperCase();
});

演示:http: //jsfiddle.net/Guffa/ByU6P/

于 2012-07-12T17:59:37.213 回答
2

很简单,像这样:

var string = "word_count".split("_");
for(var i = 0; i<string.length;i++) {
    string[i] = string[i].charAt(0).toUpperCase() + string[i].substr(1);
}
var myNiceString = string.join();

如果要将其添加到 String 对象,可以这样做:

String.prototype.titleCase = function() {
    var split = this.split("_");
    for(var i = 0; i<split.length;i++) {
        split[i] = split[i].charAt(0).toUpperCase() + split[i].substr(1);
    }
    return split.join("");
}

你会这样称呼它"word_count".titleCase();

于 2012-07-12T17:52:50.833 回答
1

您可以使用如下函数:

var Pascalize = function(word) {
    var x = word;
    result = '';
    if(-1 != word.indexOf('_')) {
        x = word.split('_');
        for(var i=0;i<x.length;i++) {
            result += x[i].substr(0, 1).toUpperCase() + x[i].substr(1);
        }
    }
    if('' == result) { result = word; }
    return result;
};

var PascalCaseString = Pascalize("this_is_a_test");
// PascalCaseString value is now 'ThisIsATest'

这是一个工作示例

于 2012-07-12T17:55:47.963 回答
0
var str = "word_count";
var re = /\b(.)([^_]+)_(.)/;
var newWord = str.replace(re, function(m,f,t,l){ return f.toUpperCase() + t + l.toUpperCase();})
console.log(newWord);
于 2012-07-12T17:56:23.687 回答
0

使用 jQuery,您可以执行以下操作:

var result = '';
$.each('word_count'.split('_'), function(idx,elem){
  result = result + elem.substr(0,1).toUpperCase() + elem.substr(1);
});
于 2012-07-12T18:02:44.980 回答
0

新版本(适用于任意数量_):

function fixString(sString) {

    var aWords = sString.split("_"),
        sResults = "";

    for (var i in aWords)
        sResults += aWords[i].charAt(0).toUpperCase() + aWords[i].slice(1);

    return sResults;

}

压缩形式:

function fixString(c){var d=c.split("_"),a="";for(var b in d){a+=d[b].charAt(0).toUpperCase()+d[b].slice(1)}return a};

老的:

function fixString(sString) {

    return sString.replace(/(.*)_(.*)/, function(sWhole, $1, $2, sWTF) {

        return ucfirst($1) + ucfirst($2);

    } )

    function ucfirst (str) {

        str += '';

        var f = str.charAt(0).toUpperCase();

        return f + str.substr(1);

    }

}

...或压缩版本:

function fixString(b){return b.replace(/(.*)_(.*)/,function(e,c,f,d){return a(c)+a(f)});function a(d){d+="";var c=d.charAt(0).toUpperCase();return c+d.substr(1)}};

当然,这就像fixString("word_count")你想要的那样使用WordCount

于 2012-07-12T18:13:19.043 回答
0

我已经查看了所有答案,但没有一个完全符合我的要求。我想要一个转换为 camelCase(不是 PascalCase)的幂等函数,并且我喜欢 String 原型扩展方法(尽管显然这并不总是最好的方法)。

无论如何,这就是我结束的地方:

String.prototype.camelize = function(){
    var pascalCase = this.replace(/((^|\_)[a-z])/g, function($1){
        return $1.toUpperCase().replace('_','');
    });
    return pascalCase.charAt(0).toLowerCase() + this.slice(1);
};
于 2015-06-08T13:47:12.060 回答
-1
var aStringLike = "word_count";

// magic follows

aStringLike = "WordCount";
于 2012-07-12T17:54:07.090 回答