将字符串转换为标题大小写,但文章(a,an,.. etc)除外

时间:2019-05-12 18:51:09

标签: javascript arrays

我正在创建一个小项目,该项目基本上会将您输入的字符串转换为标题大小写,但文章(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);
}

4 个答案:

答案 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();});
}

more information