将字符串中的单词大写的最佳方法是什么?
将字符串中的单词大写
IT技术
javascript
string
capitalization
2021-01-29 13:44:34
6个回答
/**
* Capitalizes first letters of words in string.
* @param {string} str String to be modified
* @param {boolean=false} lower Whether all other letters should be lowercased
* @return {string}
* @usage
* capitalize('fix this string'); // -> 'Fix This String'
* capitalize('javaSCrIPT'); // -> 'JavaSCrIPT'
* capitalize('javaSCrIPT', true); // -> 'Javascript'
*/
const capitalize = (str, lower = false) =>
(lower ? str.toLowerCase() : str).replace(/(?:^|\s|["'([{])+\S/g, match => match.toUpperCase());
;
- 修复了Marco Demaio的解决方案,其中前面带有空格的第一个字母不是大写。
capitalize(' javascript'); // -> ' Javascript'
- 可以处理国家符号和带重音的字母。
capitalize('бабушка курит трубку'); // -> 'Бабушка Курит Трубку'
capitalize('località àtilacol') // -> 'Località Àtilacol'
- 可以处理引号和大括号。
capitalize(`"quotes" 'and' (braces) {braces} [braces]`); // -> "Quotes" 'And' (Braces) {Braces} [Braces]
使用 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'
正则表达式基本上匹配给定字符串中每个单词的第一个字母,并仅将该字母转换为大写:
对于非 ASCII 字符,请参考此解决方案
'ÿöur striñg'.replace(/(^|\s)\S/g, l => l.toUpperCase())
此正则表达式匹配给定字符串中的第一个字母和每个以空格开头的非空格字母,并仅将该字母转换为大写:
/(?:^|\s)\S/g
尽管g
我们的正则表达式中的标志无论如何都不会通过设计捕获子组,但可以在此处使用非捕获组,如下所示。
干杯!
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
只要输入字符串中没有带重音的字母,vsync 提供的答案就可以工作。
我不知道原因,但显然\b
in regexp 匹配也重音字母(在 IE8 和 Chrome 上测试),所以像这样的字符串"località"
会被错误地大写转换为"LocalitÀ"
(à
字母被大写,因为正则表达式认为它是一个单词边界)
一个更通用的函数也适用于重音字母是这个:
String.prototype.toCapitalize = function()
{
return this.toLowerCase().replace(/^.|\s\S/g, function(a) { return a.toUpperCase(); });
}
你可以这样使用它:
alert( "hello località".toCapitalize() );
一个简单、直接(非正则表达式)的解决方案:
const capitalizeFirstLetter = s =>
s.split(' ').map(w => w.charAt(0).toUpperCase() + w.slice(1)).join(' ')
- 将字符串拆分为单词数组(通过空格分隔符)
- 将每个单词分解为单词中的第一个字符 + 其余字符
- 第一个字母转换为大写,其余保持原样
- 将 Array 连接回带空格的字符串