在Javascript中将任何类型的字符串更改为Title Case

时间:2014-12-12 09:50:18

标签: javascript string

我想写一个可以改变任何类型的字符串大小写的函数,即小写字母,大写字母,camelCase,snake_case,lisp-case到标题大小写

我不是在寻找复杂的东西,只是简单的一两个衬垫。

我尝试使用soem regexp,比如这个

function(input) {
    return input.replace(/([^\W_]+[^\s_]*) */g, function(txt){
        return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
    });
};

它适用于某些情况但不适用于所有情况

2 个答案:

答案 0 :(得分:3)

试试这个:

var titleCase = oldString
               .replace(/([a-z])([A-Z])/g, function (allMatches, firstMatch, secondMatch) {
                     return firstMatch + " " + secondMatch;
               })
               .toLowerCase()
               .replace(/([ -_]|^)(.)/g, function (allMatches, firstMatch, secondMatch) {
                     return (firstMatch ? " " : "") + secondMatch.toUpperCase();
               }
);

<强> Working Fiddle

<强> Working Fiddle2

答案 1 :(得分:2)

function titleCase(s) { 
    return s
        .replace(/([^A-Z])([A-Z])/g, '$1 $2') // split cameCase
        .replace(/[_\-]+/g, ' ') // split snake_case and lisp-case
        .toLowerCase()
        .replace(/(^\w|\b\w)/g, function(m) { return m.toUpperCase(); }) // title case words
        .replace(/\s+/g, ' ') // collapse repeated whitespace
        .replace(/^\s+|\s+$/, ''); // remove leading/trailing whitespace
}

示例:

['UPPER CASE', 'camelCase', 'snake_case', 'lisp-case'].map(titleCase)
// result: ["Upper Case", "Camel Case", "Snake Case", "Lisp Case"]