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


当前回答

John Resig (jQuery的成名者)将John Gruber编写的perl脚本移植到JavaScript。这个脚本以一种更聪明的方式大写,它没有大写像“of”和“and”这样的小词。

你可以在这里找到它:Title资本化JavaScript

其他回答

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

John Resig (jQuery的成名者)将John Gruber编写的perl脚本移植到JavaScript。这个脚本以一种更聪明的方式大写,它没有大写像“of”和“and”这样的小词。

你可以在这里找到它:Title资本化JavaScript

在字符串中大写单词的最短实现是使用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标志不会按设计捕获子组。

一个简单,直接(非正则)的解决方案:

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

将字符串拆分为单词数组(使用空格分隔符) 将每个单词分成第一个字符+单词中的其余字符 第一个字母转换为大写字母,其余字母保持原样 将数组连接回带有空格的字符串

Jquery或Javascipt没有提供内置方法来实现这一点。

CSS测试转换(text-transform:capitalize;)并不真正大写字符串的数据,而是在屏幕上显示一个大写的渲染。

如果您正在使用普通的香草ajs在数据级别上寻找一种更合法的方法来实现这一点,请使用这个解决方案=>

var capitalizeString = function (word) {    
    word = word.toLowerCase();
    if (word.indexOf(" ") != -1) { // passed param contains 1 + words
        word = word.replace(/\s/g, "--");
        var result = $.camelCase("-" + word);
        return result.replace(/-/g, " ");
    } else {
    return $.camelCase("-" + word);
    }
}