字符串大写
Capitalizing a String
我知道 CSS 属性 text-transform: capitalize
但谁能帮助我使用 Javascript 复制它?
我想向我的函数传递一个参数,它将 return 每个单词的首字母大写的字符串。
我已经走到这一步了,但我一直在尝试将我的字符串数组分成块:
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()
,将其与其余字符连接起来,然后加入再次将块组合成字符串?
有更简单的方法吗?
map
函数非常适合这个。
w[0].toUpperCase()
: 用这个把每个单词的第一个字母大写
w.slice(1)
:Return从第二个字符开始的字符串
EDGE 案例
如果用户不输入字符串,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 upperCaseFirst(value) {
var regex = /(\b[a-z](?!\s))/g;
return value ? value.replace(regex, function (v) {
return v.toUpperCase();
}) : '';
}
这将获取句子中每个单词的首字母并将其大写,但如果您只想要句子的首字母,则只需删除正则表达式末尾的 g
修饰符宣言。
我为 单个 单词和 数组 单词想出了一个解决方案。它还将确保所有其他字母都是小写的。我也使用了 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);
您可以使用以下不使用正则表达式的解决方案。
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 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;
}
我知道 CSS 属性 text-transform: capitalize
但谁能帮助我使用 Javascript 复制它?
我想向我的函数传递一个参数,它将 return 每个单词的首字母大写的字符串。
我已经走到这一步了,但我一直在尝试将我的字符串数组分成块:
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()
,将其与其余字符连接起来,然后加入再次将块组合成字符串?
有更简单的方法吗?
map
函数非常适合这个。
w[0].toUpperCase()
: 用这个把每个单词的第一个字母大写
w.slice(1)
:Return从第二个字符开始的字符串
EDGE 案例
如果用户不输入字符串,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 upperCaseFirst(value) {
var regex = /(\b[a-z](?!\s))/g;
return value ? value.replace(regex, function (v) {
return v.toUpperCase();
}) : '';
}
这将获取句子中每个单词的首字母并将其大写,但如果您只想要句子的首字母,则只需删除正则表达式末尾的 g
修饰符宣言。
我为 单个 单词和 数组 单词想出了一个解决方案。它还将确保所有其他字母都是小写的。我也使用了 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);
您可以使用以下不使用正则表达式的解决方案。
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 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;
}