Title case a sentence?
我正在尝试在javascript中对字符串进行大小写调整-到目前为止,我有以下代码:这似乎不是第一个字母的大写,而且我还坚持如何将第一个字母后的所有字母都小写。
1 2 3 4 5 6 7 8 9 | function titleCase(str) { var newstr = str.split(""); for(i=0;i<newstr.length;i++){ newstr[i].charAt(0).toUpperCase(); } newstr = newstr.join(""); return newstr; } |
要清楚,我希望句子中的每个词都大写。
我能想到的最干净的方法之一是使用ES6,但仍然缺乏适当的
1 2 | let sent ="these are just some words on paper" sent.split(' ').map ( ([h, ...t]) => h.toUpperCase() + t.join('').toLowerCase() ) |
。
在数组元素字符串上使用析构函数,通过展开运算符(使tail成为字符序列)获取head和tail,该运算符在强制使用小写之前首先联接。或者你可以用一个
1 2 3 4 5 6 | function capitalize (sentence) { return sentence.split(' ').map( function (s) { return s[0].toUpperCase() + s.substring(1).toLowerCase() }).join(' ') ; } |
也就是说,假设你还想要一个句子。
这应该有效。注意我如何将
1 2 3 4 5 6 7 8 9 10 | function titleCase(str) { var newstr = str.split(""); for(i=0;i<newstr.length;i++){ if(newstr[i] =="") continue; var copy = newstr[i].substring(1).toLowerCase(); newstr[i] = newstr[i][0].toUpperCase() + copy; } newstr = newstr.join(""); return newstr; } |
这是一个工作代码。您的代码中有问题的一行是:
1 | newstr[i].charAt(0).toUpperCase(); |
这一行得到每个单词的大写首字母,但它与此无关。下面的代码的工作方式是将第一个字符大写,然后附加单词的其余部分,然后将其赋回到
1 2 3 4 5 6 7 8 | function titleCase(str) { var newstr = str.split(""); for(i=0;i<newstr.length;i++){ newstr[i] = newstr[i].charAt(0).toUpperCase() + newstr[i].substring(1).toLowerCase(); } newstr = newstr.join(""); return newstr; } |
号
如果你喜欢像我一样使用Ramda,你可以做一件干净有趣的事情:
1 2 3 4 5 | import { concat, compose, head, join, map, split, tail, toLower, toUpper } from 'ramda'; const toWords = split(' '); const capitalizeWords = map(s => concat(toUpper(head(s)), toLower(tail(s)))); const toSentence = join(' '); const toTitleCase = compose(toSentence, capitalizeWords, toWords); |
。
当然,你也可以把它减少到
1 2 | const capitalizeWords = map(s => concat(toUpper(head(s)), toLower(tail(s)))); const toTitleCase = compose(join(' '), capitalizeWords, split(' ')); |
1 2 3 | function capitalizeFirstLetter(string) { return string.charAt(0).toUpperCase() + string.slice(1).toLowerCase(); } |
。
此函数将第一个字母大写,其余部分将小写。
从这里找到的完美答案开始,函数发生了一些变化:如何在javascript中将字符串的第一个字母变为大写?
首先全部变为小写,然后打开每个单词,然后打开每个字母,第一个字母设置为大写,然后一起打开
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | function titleCase(str) { var copy=str; copy=copy.toLowerCase(); copy=copy.split(' '); for(var i=0;i<copy.length;i++){ var cnt=copy[i].split(''); cnt[0]=cnt[0].toUpperCase(); copy[i]=cnt.join(''); } str=copy.join(' '); return str; } titleCase("I'm a little tea pot"); |
号
这里有一个
我可能遗漏了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | function titleCase(str, array){ var arr = []; var ignore = ["a","an","and","as","at","but","by","for","from","if","in","nor","on","of","off","or","out","over","the","to","vs"]; if (array) ignore = ignore.concat(array); ignore.forEach(function(d){ ignore.push(sentenceCase(d)); }); var b = str.split(""); return b.forEach(function(d, i){ arr.push(ignore.indexOf(d) == -1 || b[i-1].endsWith(":") ? sentenceCase(d) : array.indexOf(d) != -1 ? d : d.toLowerCase()); }), arr.join(""); function sentenceCase(x){ return x.toString().charAt(0).toUpperCase() + x.slice(x.length-(x.length-1)); } } var x = titleCase("james comey to remain on as FBI director", ["FBI"]); console.log(x); // James Comey to Remain on as FBI Director var y = titleCase("maintaining substance data: an example"); console.log(y); // Maintaining Substance Data: An Example |
号
1 2 3 4 5 6 7 8 9 10 | function titleCase(str) { var newArr = str.toLowerCase().split(""), firstLetter, updArr = []; for(var i=0;i<newArr.length;i+=1){ firstLetter = newArr[i].slice(0,1); updArr.push(newArr[i].replace(firstLetter, firstLetter.toUpperCase())); } return updArr.join(""); } |
号
我的解决方案
1 2 3 4 5 6 7 8 9 10 | function titleCase(str) { var myArr = str.toLowerCase().split(""); for (var a = 0; a < myArr.length; a++){ myArr[a] = myArr[a].charAt(0).toUpperCase() + myArr[a].substr(1); } return myArr.join(""); } |
号
我最近使用与第一个字母匹配的regex重新发现了这个问题,并解释了撇号。希望能有所帮助:
1 2 3 4 5 6 7 | function titleCase(str) { return str.toLowerCase().replace(/^\w|\s\w/g, function(firstLetter) { return firstLetter.toUpperCase(); }); } titleCase("I'm a little tea pot"); |
。
1 2 3 4 5 6 7 8 9 10 11 12 13 | function titleCase(str) { var titleStr = str.split(' '); for (var i = 0; i < titleStr.length; i++) { titleStr[i] = titleStr[i].charAt(0).toUpperCase() + titleStr[i].slice(1).toLowerCase(); } return titleStr.join(' '); } titleCase("i'm a little tea pot") |
1 2 3 4 5 6 7 8 9 10 11 | function titleCase(str){ var strToArray = str.split(""); var newArray = []; for(var i=0; i < strToArray.length; i++){ var element = strToArray[i].replace(strToArray[i][0], strToArray[i][0].toUpperCase()); newArray.push(element); } return (newArray.join("")); } |
。