【问题标题】:how to capitalize every first letter with none before an apostrophe but with one after in javascript如何在javascript中将每个第一个字母大写,撇号之前没有,但之后有一个
【发布时间】:2020-04-03 19:01:50
【问题描述】:

在 javascript 中,我需要将字符串(专有名称)中单词的每个首字母大写,但在此示例的撇号之前不需要大写:

来自 henri d'oriona --> Henry d'Oriona

我能得到的只是 Henry D'oriona 或最好的情况下的 Henry D'Oriona。

感谢您的帮助

雅克

【问题讨论】:

  • 到目前为止,您尝试了什么?
  • This may help,但它不考虑撇号。应该不会太难适应。

标签: javascript capitalize


【解决方案1】:

您可以使用带有正则表达式的String.replace 方法来生成单行解决方案。

请注意,String.replace 可以接受一个函数作为其第二个参数,该函数可用于循环匹配并根据需要修改它们。

const specialCapitalize = 
 str => str.replace(/(\w[^\'])+/gi, word => word[0].toUpperCase() + word.slice(1));

console.log(specialCapitalize("henri d'oriona some other words"))

正则表达式/(\w[^\'])+/由一个单词字符组成,后面没有撇号。

【讨论】:

    【解决方案2】:

    创建一个函数,它将第一个字母大写称为capitalize。 之后用空格分割字符串,遍历得到的数组。

    对于结果数组中的每个元素应用capitalize

    let upperCase = capitalize(word);

    然后将数组中的值连接成一个字符串。

    const capitalize = (s) => {
    
      if (typeof s !== 'string') return ''
      let capitalWord = '';
    
      if (s.includes("d'")) {
    
        let nameAfterSpecialChar = s.split("d'")[1];
        let capitalName = nameAfterSpecialChar.charAt(0).toUpperCase() + nameAfterSpecialChar.slice(1)
        capitalWord = "d'" + capitalName
    
      } else {
        capitalWord = s.charAt(0).toUpperCase() + s.slice(1)
      }
    
      return capitalWord;
    }
    
    const makeNameWithCapital = (name) => { 
      var wordsList = name.split(" ");
      let arrOfNames = []
    
      for (let word of wordsList) {
        let upperCase = capitalize(word);
        arrOfNames.push(upperCase);
      }
    
      let nameWithUpper = arrOfNames.join(" ");
      console.log(nameWithUpper)
      
      return nameWithUpper;
    }
    
    const nameUnparsed= "henri d'oriona "
    const nameUnparsed1 = "henri d'oriona d'example test"
    
    makeNameWithCapital(nameUnparsed)
    makeNameWithCapital(nameUnparsed1)

    从性能的角度来看,这不是最佳解决方案,但您可以将其作为一个开始。

    【讨论】:

      【解决方案3】:

      第一个案例但很棒的是: toTitleCase('henri d'oriona')

      返回 Henri D'orina 函数 toTitleCase(str) {

          return str.replace(/\w\S*/g,
          function(txt) {
                  return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
          }
          );
      

      }

      以及返回“Henri D'Oriona”的最佳情况

          function toProperCase(s) {
          return s.toLowerCase().replace( /\b((m)(a?c))?(\w)/g,
                  function($1, $2, $3, $4, $5) { if($2){return $3.toUpperCase()+$4+$5.toUpperCase();}
          return $1.toUpperCase(); });
      

      }

      【讨论】:

      • 这些都不会产生“Henri d'Orina”的首选结果
      猜你喜欢
      • 1970-01-01
      • 2013-07-16
      • 2019-12-10
      • 1970-01-01
      • 2014-05-13
      • 1970-01-01
      • 2021-01-13
      • 2020-05-04
      • 1970-01-01
      相关资源
      最近更新 更多