在字符串中大写单词的最佳方法是什么?


当前回答

我将使用regex来实现这个目的:

myString = '  this Is my sTring.  ';
myString.trim().toLowerCase().replace(/\w\S*/g, (w) => (w.replace(/^\w/, (c) => c.toUpperCase())));

其他回答

Ivo的答案很好,但我更喜欢不匹配\w,因为没有必要大写0-9和A-Z。我们可以忽略这些,只匹配a-z。

'your string'.replace(/\b[a-z]/g, match => match.toUpperCase())
// => 'Your String'

这是相同的输出,但我认为在自文档代码方面更清楚。

在字符串中大写单词的最短实现是使用ES6的箭头函数:

'your string'.replace(/\b\w/g, l => l.toUpperCase())
// => 'Your String'

ES5兼容实现:

'your string'.replace(/\b\w/g, function(l){ return l.toUpperCase() })
// => 'Your String'

regex基本上匹配给定字符串中每个单词的首字母,并只将该字母转换为大写字母:

\b匹配单词边界(单词的开头或结尾); \w匹配下面的元字符[a-zA-Z0-9]。

对于非ascii字符,请参考此解决方案

'ÿöur striñg'.replace(/(^|\s)\S/g, l => l.toUpperCase())

这个正则表达式匹配给定字符串中的第一个字母和前面有空格的每个非空格字母,并只将该字母转换为大写字母:

\s匹配一个空白字符 \S匹配非空格字符 (x|y)匹配任何指定的替代项

这里可以使用非捕获组,如下所示/(?:^|\s)\ s /g,尽管正则表达式中的g标志不会按设计捕获子组。

我将使用regex来实现这个目的:

myString = '  this Is my sTring.  ';
myString.trim().toLowerCase().replace(/\w\S*/g, (w) => (w.replace(/^\w/, (c) => c.toUpperCase())));

用这个:

String.prototype.toTitleCase = function() { 返回this.charAt(0).toUpperCase() + this.slice(1); } 让STR = 'text'; document.querySelector(#演示)。innerText = str.toTitleCase(); <div class = "app"> <p id = "demo"></p> . < / div >

function capitalize(s){
    return s.toLowerCase().replace( /\b./g, function(a){ return a.toUpperCase(); } );
};

capitalize('this IS THE wOrst string eVeR');

输出:“这是有史以来最糟糕的字符串”

更新:

这个解决方案似乎取代了我的:https://stackoverflow.com/a/7592235/104380