如何最好地将字符串中的单词大写?
/**
* 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());
;
capitalize(' javascript'); // -> ' Javascript'
capitalize('бабушка курит трубку'); // -> 'Бабушка Курит Трубку'
capitalize('località àtilacol') // -> 'Località Àtilacol'
capitalize(`"quotes" 'and' (braces) {braces} [braces]`); // -> "Quotes" 'And' (Braces) {Braces} [Braces]
'CHECK THIS OUT'.capitalize(true) -> "Check This Out"
。注意true
参数。 - disfated使用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'
该正则表达式基本上匹配给定字符串中每个单词的第一个字母,并仅将该字母转换为大写:
'ÿöur striñg'.replace(/(^|\s)\S/g, l => l.toUpperCase())
此正则表达式匹配给定字符串中前导空格和每个非空白字母,并将仅该字母转换为大写:
在这里,也可以使用非捕获组,如下所示/(?:^|\s)\S/g
尽管我们的正则表达式中的g
标志不会捕获子组。
päijät-häme
变成了 PäIjäT-HäMe
。 - Markus MeskanenEisbäRen
就是一个结果。 - Daniel B.Päijät-Häme
,但在Chrome浏览器中空格不包括破折号(-),所以名称的第二部分没有大写。可以使用/(^|\s|-)\S/g
修复。 - MiRinfunction capitalize(s){
return s.toLowerCase().replace( /\b./g, function(a){ return a.toUpperCase(); } );
};
capitalize('this IS THE wOrst string eVeR');
输出结果: "This Is The Worst String Ever"
看起来这个解决方案比我的更好: https://dev59.com/7HE95IYBdhLWcg3wY85l#7592235
提供者vsync的答案在输入字符串中只要没有重音字母就可以正常工作。
我不知道原因,但显然regexp中的 \ b
也匹配重音字母(在IE8和Chrome上测试),因此像"località"
这样的字符串会被错误地大写转换为"LocalitÀ"
(因为regexp认为它是一个单词分界符而将字母à
转成了大写)
一个更通用的函数,也适用于重音字母,如下所示:
String.prototype.toCapitalize = function()
{
return this.toLowerCase().replace(/^.|\s\S/g, function(a) { return a.toUpperCase(); });
}
您可以像这样使用它:
alert( "hello località".toCapitalize() );
" javascript".toCapitalize() -> " javascript"
- disfatedconst capitalizeFirstLetter = s =>
s.split(' ').map(w => w.charAt(0).toUpperCase() + w.slice(1)).join(' ')
function capitalize(s){ let _s = s.trim().toLowerCase(); return _s.charAt(0).toUpperCase() + _s.slice(1) }
。 - miguelpsIvo的回答很好,但我不喜欢匹配\w
,因为0-9和A-Z没有大写的必要。我们可以忽略它们,只匹配a-z。
'your string'.replace(/\b[a-z]/g, match => match.toUpperCase())
// => 'Your String'
输出结果相同,但我认为自文档代码更加清晰。
/\b\w/g
对于非英文字母也会失败。并不是每个人都处理 Unicode 字符,这将帮助那些不想处理它们的人。 - Big Money既然大家已经给出了你所要求的JavaScript答案,我想提供的是CSS属性text-transform: capitalize
可以完美地实现这一点。
我明白这可能不是你所要求的 - 因为你没有告诉我们你运行它的上下文 - 但如果只是为了展示,我肯定会选择CSS替代方案。
我的解决方案:
String.prototype.toCapital = function () {
return this.toLowerCase().split(' ').map(function (i) {
if (i.length > 2) {
return i.charAt(0).toUpperCase() + i.substr(1);
}
return i;
}).join(' ');
};
例子:
'álL riGht'.toCapital();
// Returns 'Áll Right'
'a áAA. bb . bbb .cc .d'.toCapital();
=> a Áaa. bb . Bbb .cc .d
- vsync使用JavaScript和html
String.prototype.capitalize = function() {
return this.replace(/(^|\s)([a-z])/g, function(m, p1, p2) {
return p1 + p2.toUpperCase();
});
};
<form name="form1" method="post">
<input name="instring" type="text" value="this is the text string" size="30">
<input type="button" name="Capitalize" value="Capitalize >>" onclick="form1.outstring.value=form1.instring.value.capitalize();">
<input name="outstring" type="text" value="" size="30">
</form>
基本上,你可以使用string.capitalize()
函数,它将把每个单词的第一个字母大写。
来源:http://www.mediacollege.com/internet/javascript/text/case-capitalize.html
if (object.capitalize) {...} else {String.prototype.capitalize = function()....}
其中 object 的类型为 String
。所以,这其实很简单。 - Buhake Sindi
text-transform: capitalize;
。 - kennytm