我试图写一个函数,大写字符串中每个单词的第一个字母(将字符串转换为标题情况)。
例如,当输入是“我是一个小茶壶”时,我期望“我是一个小茶壶”是输出。然而,该函数返回“i'm a little tea pot”。
这是我的代码:
函数标题案例(str) {
var splitStr = str.toLowerCase().split(“ ”);
for (var i = 0; i < splitStr.length; i++) {
if (splitStr.length[i] < splitStr.length) {
splitStr[i].charAt(0).toUpperCase();
}
str = splitStr.join(“ ”);
}
返回 str;
}
console.log(titleCase(“I'm a Little Teapot”));
有很多方法可以实现这一点,例如,你可以尝试遍历字符串,或使用JavaScript内置的split(), map()和join()
我更喜欢使用正则表达式与替换方法,这是可用的字符串
capitalize = (str) => {
return str.replace(/\b[a-z]/g, (letter) => letter.toUpperCase(););
}
使用\b边界匹治程序和[a-z]字符类标识,并使用回调函数将其替换为字母的大写版本。
更高效的
因为它只在字符串中的字符上迭代一次,并且它使用正则表达式来标识要大写的字母,这通常比使用循环和字符串操作实现相同的逻辑更快。
最短的一行(也非常快):
text.replace(/(^\w|\s\w)/g, m => m.toUpperCase());
解释:
^\w:字符串的第一个字符
|:或
\s\w:空格后的第一个字符
(^\w|\s\w)捕捉模式。
g标志:匹配所有出现的情况。
如果你想确保剩下的是小写的:
text.replace(/(^\w|\s\w)(\S*)/g, (_,m1,m2) => m1.toUpperCase()+m2.toLowerCase())
使用示例:
几点toTitleCase = str = > str。replace (/ s (^ w | \ \ w) (s *) / g, (m1, m2) = >的m1 toUpperCase () + m2。toLowerCase ()
控制台日志。(toTitleCase(“你好世界”);