繁体   English   中英

JS中每个单词的首字母大写

[英]Capitalize first letter of each word in JS

我正在学习如何将字符串中每个单词的第一个字母大写,对于这个解决方案,我理解除了 word.substr(1) 部分之外的所有内容。 我看到它正在添加断开的字符串,但是 (1) 是如何工作的?

function toUpper(str) {
return str
    .toLowerCase()
    .split(' ')
    .map(function(word) {
        return word[0].toUpperCase() + word.substr(1);
    })
    .join(' ');
 }
 console.log(toUpper("hello friend"))

返回值包含两部分:

return word[0].toUpperCase() + word.substr(1);

1) word[0].toUpperCase() : 这是第一个大写字母

2) word.substr(1)除首字母大写外的其余单词。 这是substr如何工作的文档。

如果要调试,请参考以下结果:

 function toUpper(str) { return str .toLowerCase() .split(' ') .map(function(word) { console.log("First capital letter: "+word[0]); console.log("remain letters: "+ word.substr(1)); return word[0].toUpperCase() + word.substr(1); }) .join(' '); } console.log(toUpper("hello friend"))

或者你可以节省大量时间并使用 Lodash

看着
https://lodash.com/docs/4.17.4#startCase -已添加/已编辑-
https://lodash.com/docs/4.17.4#capitalize

前任。

-添加/编辑-
您可以使用 startCase,这是另一个用于将每个单词的首字母大写的函数。

_.startCase('foo bar'); 
// => 'Foo Bar'

并且只将句子的第一个字母大写

_.capitalize('FRED');
// => 'Fred'

Lodash 是一个漂亮的 js 库,可以为您节省大量时间。

在那里你会发现很多用于字符串、数字、数组、集合等的节省时间的函数。

您也可以在客户端或服务器 (nodejs) 端使用它,使用 bower 或 node、cdn 或手动包含它。

这是一个快速的代码片段。 此代码片段将允许您使用 JavaScript 将字符串的第一个字母大写。

function CapitlizeString(word) 
{
    return word.charAt(0).toUpperCase() + word.slice(1);
}

答案的主要部分向您解释了 substr(1) 的工作原理。 我给你一个更好的方法来解决你的问题

   function capitalizeFirstLetters(str){
      return str.toLowerCase().replace(/^\w|\s\w/g, function (letter) {
          return letter.toUpperCase();
      })
    }

说明: - 首先将整个字符串转换为小写 - 其次检查整个字符串的第一个字母并检查前面有空格字符的第一个字母,并应用.toUpperCase()方法替换它。

检查这个例子:

 function capitalizeFirstLetters(str){ return str.toLowerCase().replace(/^\\w|\\s\\w/g, function (letter) { return letter.toUpperCase(); }) } console.log(capitalizeFirstLetters("a lOt of words separated even much spaces "))

function titleCase(str) {
  return str.toLowerCase().split(' ').map(x=>x[0].toUpperCase()+x.slice(1)).join(' ');
}

titleCase("I'm a little tea pot");
titleCase("sHoRt AnD sToUt");

考虑一个带有隐式返回的箭头函数:

word => `${word.charAt(0).toUpperCase()}${word.slice(1).toLowerCase()}` 

这将在一行中完成。

正则表达式/\\b\\w/匹配单词边界后跟单词字符。 您可以将它与replace()字符串方法一起使用来匹配然后替换这些字符(没有g (全局)regexp 标志,仅替换第一个匹配的字符):

> 'hello my name is ...'.replace(/\b\w/, (c) => c.toUpperCase());
'Hello my name is ...'
> 'hello my name is ...'.replace(/\b\w/g, (c) => c.toUpperCase());
'Hello My Name Is ...'

substr是一个函数,它返回(从链接的 MDN)一个新字符串,该字符串包含给定字符串的提取部分(从函数中的第二个字符开始)。 也有关于polyfill实现的注释,它添加了Get 字符串的子字符串

function titlecase(str){
   let titlecasesentence = str.split(' ');
   titlecasesentence = titlecasesentence.map((word)=>{
     const firstletter = word.charAt(0).toUpperCase();
     word = firstletter.concat(word.slice(1,word.length));

     return word;
});
  titlecasesentence = titlecasesentence.join(' ');
  return titlecasesentence;
}
titlecase('this is how to capitalize the first letter of a word');
const capitalize = str => {
  if (typeof str !== 'string') {
    throw new Error('Invalid input: input must of type "string"');
  }

  return str
    .trim()
    .replace(/ {1,}/g, ' ')
    .toLowerCase()
    .split(' ')
    .map(word => word[0].toUpperCase() + word.slice(1))
    .join(' ');
};
  • 使用trim()清理输入字符串以从前端和后端删除空格
  • RegExp替换中间的任何多余空格

  • 标准化并将其全部转换为toLowerCase()字母

  • 将字符串转换为以空格split的数组

  • 将该数组映射为大写单词数组

  • join(' ')带空格的数组并返回新的大写字符串

使用 ES6

let captalizeWord = text => text.toLowerCase().split(' ').map( (i, j) => i.charAt(0).toUpperCase()+i.slice(1)).join(' ')

captalizeWord('cool and cool')

以下是substr工作原理的示例:当您传入一个数字时,它会根据您提供的索引获取字符串的一部分:

 console.log('Testing string'.substr(0)); // Nothing different console.log('Testing string'.substr(1)); // Starts from index 1 (position 2) console.log('Testing string'.substr(2));

因此,他们取每个单词的第一个字母,将其大写,然后添加单词的其余部分。 由于您只将第一个字母大写,因此开始的索引始终为1

word.substr(i) ,参数表示单词的索引。 此方法从索引等于i的字母到单词结尾处剪切单词。 您还可以添加另一个参数,如word.substr(i, len) ,其中len表示字符分割的长度。 例如: 'abcde'.substr(1, 2)bc

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

如果数组将第一个字母设置为大写并与索引 1 中的其他字母连接,则只需映射即可。这里的数组不是您的情况。

const capitalizeNames = (arr) => {
arr.map((name) => {
    let upper = name[0].toUpperCase() + name.substr(1)       
    console.log(upper)
})

}

整个句子只会大写一行

"my name is John".split(/ /g).map(val => val[0].toUpperCase() + val.slice(1)).join(' ')

输出“我叫约翰”

一个很好的简单解决方案,使用纯 JavaScript。 JSFiddle

function initCap(s) {
  var result = '';
  if ((typeof (s) === 'undefined') || (s == null)) {
    return result;
  }

  s = s.toLowerCase();
  var words = s.split(' ');
  for (var i = 0; i < words.length; ++i) {
    result += (i > 0 ? ' ' : '') +
      words[i].substring(0, 1).toUpperCase() +
      words[i].substring(1);
  }
  return result;
}

这是另一种将句子/名称/...大写的干净方法:

const capitalizeNames =(name)=>{
     const names = name.split(' ') // ['kouhadi','aboubakr',essaaddik']
     const newCapName = [] // declaring an empty array
   for (const n of names){
       newCapName.push(n.replace(n[0], n[0].toUpperCase()));
   }
   return newCapName.join(' ') 
}
capitalizeNames('kouhadi aboubakr essaaddik'); // 'Kouhadi Aboubakr Essaaddik'

您可以使用这些代码行:

function toUpper(str) {
return [str.split('')[0].toUpperCase(), str.split('').slice(1, str.split('').length).join("")].join("")
}

基本上它会拆分所有字符,切片,创建一个没有第一个的新数组,并用字符的大写版本替换第一个。

(是的,这是经过测试的,它适用于 Edge、Chrome 和更新版本的 Internet Explorer。)

这可能不是最好的答案,但希望它对你来说足够好。

暂无
暂无

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

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