[英]capitalizing only first letter in a contraction
我的挑战是将字符串中每个单词的首字母大写,同时确保所有其他字母均为小写。 我花了更多时间,然后我愿意承认这一点,我的代码如下所示。 大约完成了95%。
唯一的缺陷是它会将像“我”这样的收缩返回为“我”。 由于某种原因,它把收缩视为两个单独的词。 我在大写第一个字母的步骤之后立即放置了console.log进行了测试(在示例中已将其注释掉)。 它返回在同一步骤中将“ I”和“ M”都大写。 我如何获得仅更改“ I”的内容?
function titleCase(str) {
str = str.toLowerCase(); //make everything lowercase
str = str.split(" "); //make the string to array
for(i = 0; i < str.length; i++){
var strItem = str[i]; //take item in array
strItem = strItem.replace(/\b./g, function(m){ return m.toUpperCase(); }); //capitalize it
//console.log(strItem);
str[i] = strItem; //put changed item back into array
}
str = str.join(" "); //turn array back into string
return str;
}
titleCase("I'm a little tea pot");
感谢您的时间。
我的建议是,您使用<string>.charAt(<index>)
来获取字符串的第一个字母,而<string>.slice(<index>)
可以给您一部分字符串。
提示:提取每个单词后,可以使用charAt()
提取第一个字母,将其大写,然后将字符串的其余部分切成小写。
更新:
回答:
function upperFirstLetterInWords(str) { var totalString = ""; //Take words from sentence - //Use regex /\\s+/g for many spaces in sentence. var words = str.split(" "); //Take each word... //Using for loop as we have an array and it is //more efficient than foreach loop or lambda. for(var i = 0; i < words.length; ++i) { //Make your changes here.javascript:; totalString += words[i].charAt(0).toUpperCase() + words[i].slice(1).toLowerCase() + " "; } //Remove last space. return totalString.trim(); } console.log(upperFirstLetterInWords("I'm A LitTle TEa POt."));
您的问题似乎是在替换表达式中使用了全局匹配。
取下g
。
function titleCase(str) { str = str.toLowerCase(); // Make everything lowercase str = str.split(/\\s+/); // Make the string to array for (var i = 0; i < str.length; i++) { var strItem = str[i]; // Take item in array strItem = strItem.replace(/\\b./, function(m) { return m.toUpperCase(); // Capitalize it } ); str[i] = strItem; // Put changed item back into array } return str.join(" "); // Turn array back into string } document.body.innerHTML = titleCase("I'm a little tea pot");
您可以创建一个capitalCase
函数并将其用作每个单词的映射(回调)函数。
function titleCase(str) { return str.split(/\\s+/).map(captitalCase).join(' '); } function captitalCase(str) { return str.charAt(0).toUpperCase() + str.substring(1).toLowerCase(); } document.body.innerHTML = titleCase("I'm a little tea pot");
如果你想保留空白,可以替代所有的序列非空白字符各自的capitalCase
等同。
function titleCase(str) { return str.replace(/(\\S+)/g, function(m) { return captitalCase(m); }); } function captitalCase(str) { return str.charAt(0).toUpperCase() + str.substring(1).toLowerCase(); } document.body.innerHTML = titleCase("I'm a little \\n tea pot");
body { white-space: pre; }
出于好奇,我想看看是否可以在不使用正则表达式的情况下提出另一种javascript解决方案:
var selectedParagraph = document.getElementsByTagName('p')[1]; var textUC = []; function toTitleCase(element) { var textLC = element.innerHTML.toLowerCase().split(' '); for (var i = 0; i < textLC.length; i++) { textUC[i] = textLC[i].substr(0,1).toUpperCase() + textLC[i].substr(1);} element.innerHTML = textUC.join(' '); } window.onload = toTitleCase(selectedParagraph);
<p>I'm a little tea pot</p> <p>I'm a little tea pot</p>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.