将字符串的每个单词的首字母大写

function titleCase(str) {
  r=[];
  s=str.toLowerCase().split(' ');
  s.map(function(x){
    t1=x[0].toUpperCase();
    t2=x.substr(1);
    return r.push(t1+t2);
    });
  return r.join(' ');
}
titleCase('i aM heRe');

结果  I Am Here

感觉代码不优雅,太罗嗦,可否帮忙进化一下?
阅读 5.7k
7 个回答

用正则实现:

function titleCase(str) {
   return str.toLowerCase().replace(/(?:^|\s)[a-z]/g, function (s) {
      return s.toUpperCase();
   });
};
titleCase('i aM heRe');

几个常用正则

这样最简洁了吧~

"i aM heRe".toLowerCase().replace(/\b[a-z]/g,function(c){return c.toUpperCase()})
"I Am Here"

ES6
"i aM heRe".toLowerCase().replace(/\b[a-z]/g,c => c.toUpperCase())

Your environment has been set up for using Node.js 4.4.4 (ia32) and npm.

C:\Documents and Settings\Administrator>node
> "i aM heRe".toLowerCase().replace(/\b[a-z]/g,c => c.toUpperCase())
'I Am Here'
>

function upper(str){
return str.toLowerCase().replace(/\b[a-z]/g,function(v){return v.toUpperCase();});
}
upper('miao zui meng');
(ฅ>ω<*ฅ) 正则也可以替换成 /( |^)/g

'i aM heRe'.split(' ').map(function(v, i, res) {return (res = '') || (res += v[0].toUpperCase()) && (res += v.substr(1).toLowerCase()) && res});

其实我感觉这个用正则应该简单很多,无奈我不熟悉正则,等待其他人补充。

css:

text-transform: capitalize;

regex:

"i aM heRe".toUpperCase().replace(/(\s+\w|\w)(\w+)/g, function(s,s1,s2){return s1 + s2.toLowerCase()})
function toUpperCaseForInitial(str) { 
  return str.split(' ').map(function (item) {
    var initial = item[0];
    return item.replace(initial, initial.toUpperCase());
  }).join(' ');
}

console.log(toUpperCaseForInitial('hello world!'));
推荐问题
宣传栏