我想写一个可以改变任何类型的字符串大小写的函数,即小写字母,大写字母,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();
});
};
它适用于某些情况但不适用于所有情况
答案 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"]