在字符串中大写单词的最佳方法是什么?
当前回答
我喜欢简单的过程。首先将字符串更改为数组,以便于迭代,然后使用map函数更改每个单词,因为你想要它是。
function capitalizeCase(str) {
var arr = str.split(' ');
var t;
var newt;
var newarr = arr.map(function(d){
t = d.split('');
newt = t.map(function(d, i){
if(i === 0) {
return d.toUpperCase();
}
return d.toLowerCase();
});
return newt.join('');
});
var s = newarr.join(' ');
return s;
}
其他回答
既然每个人都给了您所要求的JavaScript答案,我将添加CSS属性text-transform: capitalize将执行此操作。
我意识到这可能不是你想要的-你没有给我们任何上下文,你正在运行这个-但如果它只是为了表示,我肯定会选择CSS替代方案。
使用JavaScript和html
String.prototype.capitalize = function() { 返回this.replace (/ (^ | \ s) ([a - z]) / g函数(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"> > < /形式
基本上,你可以用string。capitalize()它会大写每个单词的第一个字母。
来源:http://www.mediacollege.com/internet/javascript/text/case-capitalize.html
http://www.mediacollege.com/internet/javascript/text/case-capitalize.html是众多答案中的一个。
谷歌可以是解决此类问题所需的全部内容。
naïve方法是用空格分隔字符串,结果数组中每个元素的首字母大写,然后将它们重新连接起来。这就保留了现有的大写(例如,HTML仍然是HTML,而不会变成像HTML那样愚蠢的东西)。如果不希望产生这种影响,请在拆分字符串之前将整个字符串转换为小写字母。
还有loctus: https://locutus.io/php/strings/ucwords/,它是这样定义的:
function ucwords(str) {
// discuss at: http://locutus.io/php/ucwords/
// original by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
// improved by: Waldo Malqui Silva (http://waldo.malqui.info)
// improved by: Robin
// improved by: Kevin van Zonneveld (http://kvz.io)
// bugfixed by: Onno Marsman (https://twitter.com/onnomarsman)
// bugfixed by: Cetvertacov Alexandr (https://github.com/cetver)
// input by: James (http://www.james-bell.co.uk/)
// example 1: ucwords('kevin van zonneveld')
// returns 1: 'Kevin Van Zonneveld'
// example 2: ucwords('HELLO WORLD')
// returns 2: 'HELLO WORLD'
// example 3: ucwords('у мэри был маленький ягненок и она его очень любила')
// returns 3: 'У Мэри Был Маленький Ягненок И Она Его Очень Любила'
// example 4: ucwords('τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός')
// returns 4: 'Τάχιστη Αλώπηξ Βαφής Ψημένη Γη, Δρασκελίζει Υπέρ Νωθρού Κυνός'
return (str + '').replace(/^(.)|\s+(.)/g, function ($1) {
return $1.toUpperCase();
});
};
在字符串中大写单词的最短实现是使用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标志不会按设计捕获子组。