大写每个单词的第一个字母,不能按预期方式工作

时间:2019-03-26 22:39:34

标签: javascript

首先,我知道这样做不是正确的方法,但是我想了解为什么会这样,所以我会更好地理解这种语言。

function titleCase(str) {
  let str1 = str.toLowerCase();
  str1 = str1.replace(str1[0], str1[0].toUpperCase());
  console.log(str1);

  for(let i=1; i < str1.length; i++){
    if(str1[i]===' '){
      str1 = str1.replace(str1[i+1], str1[i+1].toUpperCase());
      console.log(i);
      console.log(str1);
    }
  }
  return str1;
}

titleCase("ab cd ef gh ba");

因此,如果最后一个单词的第一个字母在起作用之前没有出现在任何单词的倒数第二个字母中,则“ ab cd ef gh”在这里没有问题,但是“ ab cd ef gh ba”会导致以下输出:“ AB Cd Ef Gh ba”等。 谢谢!

3 个答案:

答案 0 :(得分:1)

发生这种情况的原因是<img src="data:image/jpeg;base64,${image}" />函数将替换 first 事件。

.replace()

第一次找到空间时,它将替换首次出现的小写字母“ u”,它恰好是正确的:

"Tell us more about your question us"

但是,当涉及到最后一个单词“ us”时,它将再次尝试查找小写字母“ u”的第一个出现,即小写“ u”的中间位置:

"Tell us more about your question us"
//    ^ this "u" happens to be the first occurrence

答案 1 :(得分:1)

用于替换此类id而不是使用正则表达式

使用/\b(.)/g作为第一个字母的模式,并以\ U $ 0作为替换字符串,它应该按预期工作

这是一个小提琴

https://regex101.com/r/qQ2dE4/423

答案 2 :(得分:0)

这将替换字符串中字符的第一个匹配项。因此,较早位置的字符也有可能被替换。

str1 = str1.replace(str1[i+1], str1[i+1].toUpperCase());