繁体   English   中英

字符串大写

[英]Capitalizing a String

我知道 CSS 属性text-transform: capitalize但有人可以帮助我使用 Javascript 复制它吗?

我想将一个参数传递给我的函数,该函数将返回每个单词的第一个字母大写的字符串。

我已经走了这么远,但我一直试图将我的字符串数组分成块:

function upper(x){
  x = x.split(" "); 

  // this function should return chunks but when called I'm getting undefined
  Array.prototype.chunk = function ( n ) {
      return [ this.slice( 0, n ) ].concat( this.slice(n).chunk(n) );
  };

  x = x.chunk;

}

upper("chimpanzees like cigars")

在块之后我猜我需要再次将每个块分成第一个字符和剩余的字符,在第一个字符上使用.toUpperCase() ,将其与剩余的部分连接起来,然后再次将块连接到一个字符串?

有没有更简单的方法来做到这一点?

我想出了两个单字,也为字阵列的解决方案。 它还将确保所有其他字母都是小写的,以便更好地进行测量。 我也使用了 Airbnb 风格指南。 我希望这有帮助!

 const mixedArr = ['foo', 'bAr', 'Bas', 'toTESmaGoaTs']; const word = 'taMpa'; function capitalizeOne(str) { return str.charAt(0).toUpperCase().concat(str.slice(1).toLowerCase()); } function capitalizeMany(args) { return args.map(e => { return e.charAt(0).toUpperCase().concat(e.slice(1).toLowerCase()); }); }; const cappedSingle = capitalizeOne(word); const cappedMany = capitalizeMany(mixedArr); console.log(cappedSingle); console.log(cappedMany);

map功能非常适合这一点。

w[0].toUpperCase() :使用它来大写每个单词的第一个字母

w.slice(1) :从第二个字符开始返回字符串

边缘案例

如果用户不输入字符串, map函数将无法工作并引发错误。 这可以通过检查用户是否实际输入内容来防止。

 var userInput = prompt("Enter a string"); var capitalizedString = userInput == "" ? "Invalid String" : userInput.split(/\\s+/).map(w => w[0].toUpperCase() + w.slice(1)).join(' '); console.log(capitalizedString);

您可以使用以下不使用正则表达式的解决方案。

function capitalize(str=''){
  return str.trim().split('')
    .map((char,i) => i === 0 ? char.toUpperCase() : char )
    .reduce((final,char)=> final += char, '' )
  }

capitalize(' hello')                     // Hello
"abcd efg ijk lmn".replace(/\b(.)/g, (m => m.toUpperCase())) // Abcd Efg Ijk Lmn

您可能想尝试正则表达式方法:

function upperCaseFirst(value) {
    var regex = /(\b[a-z](?!\s))/g;
    return value ? value.replace(regex, function (v) {
      return v.toUpperCase();
    }) : '';
}

这将获取句子中每个单词的第一个字母并将其大写,但如果您只想要句子的第一个字母,则可以删除正则表达式声明末尾的g修饰符。

或者你可以只迭代字符串并完成工作:

function capitalize(lowerStr){
  var result = "";
  var isSpacePrevious = false;
  for (var i=0; i<lowerStr.length; i++){
      if (i== 0 || isSpacePrevious){
         result += lowerStr[i].toUpperCase();
         isSpacePrevious = false;
         continue;
      }
      if (lowerStr[i] === ' '){
          isSpacePrevious = true;
      }  
      result +=  lowerStr[i];
  }
  return result;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM