大写每个单词的首字母

17
我想使用JavaScript函数将每个单词的首字母大写

例如:

THIS IS A TEST ---> This Is A Test
this is a TEST ---> This Is A Test
this is a test ---> This Is A Test

有什么简单的JavaScript函数可以实现...


https://dev59.com/XHNA5IYBdhLWcg3wSrqa - reader_1000
转换为小写,通过空格分割成单独的单词,对每个单词的第一个字符使用 toUpperCase()。 - user684934
2
@reader_1000:该问题涉及将字符串的第一个字符大写,而这个问题涉及将每个单词的第一个字符大写(这更加复杂,需要不同的解决方案)。 - oezi
CSS的目的不就是“样式化”DOM吗?text-transform: capitalize; - worked
9个回答

36

这里是我正在使用的一行小代码来完成任务

var str = 'this is an example';
str.replace(/\b./g, function(m){ return m.toUpperCase(); });

但是John Resig编写了一段相当棒的脚本,可以处理许多情况http://ejohn.org/blog/title-capitalization-in-javascript/

更新

ES6+版本的答案:

str.split(' ').map(s => s.charAt(0).toUpperCase() + s.slice(1)).join(' ')

可能还有更好的方法可用,它将适用于带重音符号的字符。


4
我喜欢这个简单明了的表达。 - Jonathan Arkell
1
尝试使用更新的答案。不幸的是,\b 无法匹配特殊字符。 - Stephen

10
function capitalizeEachWord(str)
{
   var words = str.split(" ");
   var arr = [];
   for (i in words)
   {
      temp = words[i].toLowerCase();
      temp = temp.charAt(0).toUpperCase() + temp.substring(1);
      arr.push(temp);
   }
   return arr.join(" ");
}

6
"tHiS iS a tESt".replace(/[^\s]+/g, function(str){ 
    return str.substr(0,1).toUpperCase()+str.substr(1).toLowerCase();
  });

其他变体:

"tHiS iS a tESt".replace(/(\S)(\S*)/g, function($0,$1,$2){ 
    return $1.toUpperCase()+$2.toLowerCase();
  });

4

这是一个简单的解决方案,它将句子拆分为一个数组,然后循环遍历该数组,创建一个新的数组来存储首字母大写的单词。

 function capitalize(str){

  var strArr = str.split(" ");
  var newArr = [];

  for(var i = 0 ; i < strArr.length ; i++ ){

    var FirstLetter = strArr[i].charAt(0).toUpperCase();
    var restOfWord = strArr[i].slice(1);

    newArr[i] = FirstLetter + restOfWord;

  }

  return newArr.join(' ');

}

1
您可以使用以下方法,使用过滤器:

function Ucwords(str){
    var words = str.split(' ');
    var arr = [];
    words.filter(function(val){
        arr.push(val.charAt(0).toUpperCase()+ val.substr(1).toLowerCase());             
    })
    console.log(arr.join(" ").trim());
    return arr.join(" ").trim();
}

Ucwords("THIS IS A TEST") //This Is A Test

Ucwords("THIS ") //This

1

看一下php.js中的ucwords - 这似乎是你要找的东西。基本上,它是:

function ucwords (str) {
    return (str + '').replace(/^([a-z])|\s+([a-z])/g, function ($1) {
        return $1.toUpperCase();
    });
}

请注意,THIS IS A TEST将返回THIS IS A TEST,因此您需要像这样使用它:
var oldstring = "THIS IS A TEST";
var newstring = ucwords(oldstring.toLowerCase());

或者稍微修改一下这个函数:

function ucwords (str) {
    str = (str + '').toLowerCase();
    return str.replace(/^([a-z])|\s+([a-z])/g, function ($1) {
        return $1.toUpperCase();
    });
}
var oldstring = "THIS IS A TEST";
var newstring = ucwords(oldstring); // This Is A Test

1
这将使以空格或破折号分隔的每个单词大写。
function capitalize(str){
    str = str.toLowerCase();
    return str.replace(/([^ -])([^ -]*)/gi,function(v,v1,v2){ return v1.toUpperCase()+v2; });
}

例子:

  • i lOvE oRanges => 我喜欢橙子
  • a strAnge-looKing syntax => 一个奇怪的语法

等等


1
如果您不介意使用库,您可以使用 Sugar.js capitalize()

capitalize(all = false) 将字符串的第一个字符大写,其他所有字母小写。如果 all 为 true,则字符串中的所有单词都将被大写。

示例:

'hello kitty'.capitalize()     -> 'Hello kitty'
'hello kitty'.capitalize(true) -> 'Hello Kitty'

-1
{
        String s = "this is for testing";
        String sw[] = s.split("\\s");
        String newS = "";
        for(int i=0; i<=sw.length-1; i++)
        {
            String first = sw[i].substring(0,1);
            String last = sw[i].substring(1);
            newS+= first.toUpperCase()+last+" ";
            
        }
        System.out.println(newS);
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接