JavaScript字符串单词首字母大写的实现方式

下面的代码是我的实现,不知道有没有更好的实现方案。

javascriptString.prototype.firstUpperCase = function(){
    return this.replace(/\b(\w)(\w*)/g, function($0, $1, $2) {
        return $1.toUpperCase() + $2.toLowerCase();
    });
}

求接龙。

阅读 79.2k
13 个回答

CSS 完全搞定啊 text-transform: capitalize;
这么简单的功能 还用js 就太浪费累

用不了写那么长

let firstUpperCase = ([first, ...rest]) => first.toUpperCase() + rest.join('')

其实有很多方法。
最常见的,最基础的:

1.先split()成数组。
2.将数组中的元素全部小写化。(toLowerCase())
3.使用replace(),toUpperCase()方法将每一项首字母大写化,之后join()就可以了。
但是这样确实很麻烦。

正在学习ES6中,ES6里面解决这个方案这样写就可以了。

function firstUpperCase(str) {
  return str.toLowerCase().replace(/( |^)[a-z]/g, (L) => L.toUpperCase());
}

是不是觉得很简洁?

楼主如果用正则表达式的话,下面的表达应该更简单

String.prototype.firstUpperCase=function(){
    return this.replace(/^\S/,function(s){return s.toUpperCase();});
}

why not use CSS? text-transform: capitalize;can solve this.
you can also use this function:

function firstUpperCase(str) {
  return str.toLowerCase().replace(/\b[a-z]/g,function(s){return s.toUpperCase();});
  }
  

but if only want to change the initials of the whole strings,try this:

function firstUpperCase(str) {
  return str.toLowerCase().replace(/^\S/g,function(s){return s.toUpperCase();});
}
"#{str[0].toUpperCase()}#{str[1..]}"
`${str[0].toUpperCase()}${str.slice(1)}`

var str = 'sssLLdldldls';
console.log(str.charAt(0).toUpperCase() + str.slice(1));

正则表达式\b会把英文缩写,譬如I'm拆分成两个部分,导致输出为I'M,所以不能使用\b
我先将字符串按照空格拆分,然后使用charAt(0)选中首字符,再用replace()进行大写替换。

function titleCase(str) {
  //将字符串转化为消协,并拆分成单词
  str=str.toLowerCase().split(" ");
  //循环将每个单词的首字母大写
  for(var i=0;i<str.length;i++){
    //选取首个字符
    var char=str[i].charAt(0);
    //将单子首字符替换为大写
    str[i]=str[i].replace(char,function(s){return s.toUpperCase();});
  }
  //拼合数组
  str=str.join(" ");
  return str;
}
String.prototype.firstUpperCase = function () {
  return this.toString()[0].toUpperCase() + this.toString().slice(1);
}

不改变原字符串。(暂时想不到改变原字符串的方式,因为我记得字符串是只读的)

新手上路,请多包涵
function firstUpperCase(source) {
    return source[0].toLocaleUpperCase().concat(source.slice(1))
}

在上面的回答下改进了以下,简单直接

'hxd'.replace(/^\S/, s => s.toUpperCase())
String.prototype.firstUpperCase = function(){
    return this.replace(/^\S|\s(\S)/g, s => s.toUpperCase())
}
推荐问题
宣传栏