[英]Capitalizing a String
我知道 CSS 属性text-transform: capitalize
但有人可以帮助我使用 Javascript 复制它吗?
我想将一个参数传递给我的函数,该函数将返回每个单词的第一个字母大写的字符串。
我已经走了这么远,但我一直试图将我的字符串数组分成块:
function upper(x){
x = x.split(" ");
// this function should return chunks but when called I'm getting undefined
Array.prototype.chunk = function ( n ) {
return [ this.slice( 0, n ) ].concat( this.slice(n).chunk(n) );
};
x = x.chunk;
}
upper("chimpanzees like cigars")
在块之后我猜我需要再次将每个块分成第一个字符和剩余的字符,在第一个字符上使用.toUpperCase()
,将其与剩余的部分连接起来,然后再次将块连接到一个字符串?
有没有更简单的方法来做到这一点?
我想出了两个单字,也为字阵列的解决方案。 它还将确保所有其他字母都是小写的,以便更好地进行测量。 我也使用了 Airbnb 风格指南。 我希望这有帮助!
const mixedArr = ['foo', 'bAr', 'Bas', 'toTESmaGoaTs']; const word = 'taMpa'; function capitalizeOne(str) { return str.charAt(0).toUpperCase().concat(str.slice(1).toLowerCase()); } function capitalizeMany(args) { return args.map(e => { return e.charAt(0).toUpperCase().concat(e.slice(1).toLowerCase()); }); }; const cappedSingle = capitalizeOne(word); const cappedMany = capitalizeMany(mixedArr); console.log(cappedSingle); console.log(cappedMany);
map
功能非常适合这一点。
w[0].toUpperCase()
:使用它来大写每个单词的第一个字母
w.slice(1)
:从第二个字符开始返回字符串
边缘案例
如果用户不输入字符串, map
函数将无法工作并引发错误。 这可以通过检查用户是否实际输入内容来防止。
var userInput = prompt("Enter a string"); var capitalizedString = userInput == "" ? "Invalid String" : userInput.split(/\\s+/).map(w => w[0].toUpperCase() + w.slice(1)).join(' '); console.log(capitalizedString);
您可以使用以下不使用正则表达式的解决方案。
function capitalize(str=''){
return str.trim().split('')
.map((char,i) => i === 0 ? char.toUpperCase() : char )
.reduce((final,char)=> final += char, '' )
}
capitalize(' hello') // Hello
"abcd efg ijk lmn".replace(/\b(.)/g, (m => m.toUpperCase())) // Abcd Efg Ijk Lmn
您可能想尝试正则表达式方法:
function upperCaseFirst(value) {
var regex = /(\b[a-z](?!\s))/g;
return value ? value.replace(regex, function (v) {
return v.toUpperCase();
}) : '';
}
这将获取句子中每个单词的第一个字母并将其大写,但如果您只想要句子的第一个字母,则可以删除正则表达式声明末尾的g
修饰符。
或者你可以只迭代字符串并完成工作:
function capitalize(lowerStr){
var result = "";
var isSpacePrevious = false;
for (var i=0; i<lowerStr.length; i++){
if (i== 0 || isSpacePrevious){
result += lowerStr[i].toUpperCase();
isSpacePrevious = false;
continue;
}
if (lowerStr[i] === ' '){
isSpacePrevious = true;
}
result += lowerStr[i];
}
return result;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.