我正在创建一个小项目,该项目基本上会将您输入的字符串转换为标题大小写,但文章(a,an,the和...等)的语法例外。因此,这些文章例外将为小写,但其他任何情况都将为大写。我知道我需要创建这些异常的数组,但不知道如何从这里继续。我是一个初学者,所以我希望有些不太复杂的事情可以实现此结果。谢谢!
const button = document.querySelector('.button');
//event listeners
button.addEventListener('click', grabText);
function grabText() {
const textBox = document.querySelector('#text-box').value;
const splitStr = textBox.toLowerCase().split(" ");
const exceptions = ["and", "the", "a", "an", "for", "to","but", "at","by"]
for(i = 0; i < splitStr.length; i++) {
splitStr[i] = splitStr[i].charAt(0).toUpperCase() + splitStr[i].substring(1);
}
const array = splitStr.join(" ");
array.toString();
console.log(array);
}
答案 0 :(得分:1)
如果字符串是数组的一部分,则Array.includes(String)函数返回。
这应该有效,
for(i = 0; i < splitStr.length; i++) {
// Check if our word is a part of the exceptions list
if(i>0 && exceptions.includes(splitStr[i]))
// if it's an exception skip the capatilization
continue;
splitStr[i] = splitStr[i].charAt(0).toUpperCase() + splitStr[i].substring(1);
}
i> 0条件的信用额转到@Ringo,我之前从未考虑过。他是对的,无论如何,始终应将第一个单词大写。
答案 1 :(得分:1)
您可以将正则表达式replace
与回调一起使用:
const textBox = document.querySelector('#text-box');;
const output = document.querySelector('#output');
const regex = /(^|\b(?!(and?|at?|the|for|to|but|by)\b))\w+/g;
textBox.addEventListener("input", () =>
output.textContent = textBox.value.toLowerCase()
.replace(regex, s => s[0].toUpperCase() + s.slice(1))
);
<textarea id="text-box"></textarea>
<div id="output"></div>
请注意,当此类例外词后跟标点符号(例如, “做什么用,做什么用?” -“ for”和“ by”仍然是小写。
答案 2 :(得分:0)
只需检查您的单词是否包含在异常数组中即可。 我使用地图函数代替了for循环的旧硬编码。
function grabText() {
const textBox = document.querySelector('#text-box').value;
const splitStr = textBox.toLowerCase().split(" ");
const exceptions = ["and", "the", "a", "an", "for", "to","but", "at","by"];
const result = splitStr.map(word => {
const formattedWord = exceptions.indexOf(word) == -1 ?
word.charAt(0).toUpperCase() + word.substring(1) : word;
// you can also use exceptions.includes(word);
return formattedWord;
});
const array = result.join(" ");
console.log(array);
}
答案 3 :(得分:0)
function sentenceCase (str) {
if ((str===null) || (str===''))
return false;
else
str = str.toString();
return str.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();});
}