34

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

上函数(str){返回str.to下壳体().split(“”).map(函数(单词){return word[0].toUpperCase()+word.substr(1);}).join(“”);}console.log(toUpper(“你好,朋友”)
1
  • 8
    也许是时候接受这些答案了? 评论 2018年10月20日14:07

21个答案21

重置为默认值
41

返回值包含两部分:

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

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

2)word.substr(1)除首字母大写外,其余均为单词。这是关于如何子(substr)作品。

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

上函数(str){返回str.to下壳体().split(“”).map(函数(单词){console.log(“第一个大写字母:”+单词[0]);log(“保留字母:”+word.substr(1));return word[0].toUpperCase()+word.substr(1);}).join(“”);}console.log(toUpper(“你好,朋友”)

1
19

或者你可以节省很多时间并使用Lodash

看看
https://lodash.com/docs/4.17.4#startCase-添加/编辑-
https://lodash.com/docs/4.17.4#大写

前任。

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

_.startCase('foo bar');//=>“Foo酒吧”

只大写句子的第一个字母

_.大写(“FRED”);//=>“弗雷德”

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

在那里你可以找到很多字符串、数字、数组、集合等节省时间的函数。

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

4
  • 这只会使整个字符串的第一个字母大写_.大写('first second')//=>'first second',问题是他希望每个单词都以大写字母开头。如果你只想替换第一个字母,你应该指定这不是一个完整的解决方案 评论 2017年10月10日7:59
  • 这就是lodash的妙处,然后您可以使用_.startCase('foo bar');//Foo Bar,或者对于不同的结果,您可以使用其他函数作为示例_.toUpper('fooBar');//FOOBAR公司 评论 2017年10月12日15:35
  • 2
    这无疑是最干净、最好的方法。只需使用:_.startCase(_.大写('foo bar'))即使你有一个字符串FOO酒吧,它将转换为Foo酒吧 评论 2019年11月7日23:36
  • 如果您想删除'-'或'/'并将字符串大写,这也很好
    – 是的
    评论 2020年8月4日12:24
14

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

函数大写文本(单词){return word.charAt(0).toUpperCase()+word.slice(1);}
13

regexp/\b\w(黑白)/与匹配单词边界后跟一个单词字符。您可以将此与替换()要匹配的字符串方法,然后替换这些字符(不带(全局)regexp标志仅替换第一个匹配字符):

>“你好,我叫……”。替换(/\b\w/,(c)=>c.toUpperCase());“你好,我叫…”>“你好,我叫……”。替换(/\b\w/g,(c)=>c.toUpperCase());“你好,我的名字是……”
  • 1
    请在示例旁边添加一些解释。简单地在代码片段中添加一些正则表达式对理解这个想法没有太大帮助。
    – 胜利者
    评论 2020年5月15日12:52
  • 2
    好吧。天哪,对不起,我觉得这很容易解释。 评论 2020年5月16日1:05
  • 1
    应该是公认的解决方案。无需任何特殊包装,只需按您的要求进行即可。 评论 2023年3月31日17:20
7
函数titleCase(str){return str.toLowerCase().split(“”).map(x=>x[0].toUpperCase(()+x.slice(1)).join(“”;}titleCase(“我是一个小茶壶”);titleCase(“sHoRt和sToUt”);
6

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

函数大写首字母(str){return str.toLowerCase().replace(/^\w|\s\w/g,函数(字母){return letter.toUpperCase();})}

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

检查此示例:

函数大写首字母(str){return str.toLowerCase().replace(/^\w|\s\w/g,函数(字母){return letter.toUpperCase();})}log(大写FirstLetters(“10个单词甚至分隔了很多空格”)

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

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

这将在一行中完成。

2

使用ES6

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

子(substr)是返回(从链接的MDN)的函数包含给定字符串的提取部分的新字符串(从第二函数中的字符)。有一条关于聚乙烯填料实现,这增加了获取字符串的子字符串.

1
  • 子(substr)子串“不正确。你是说“子(substr)子字符串”? 评论 2017年3月13日2:25
1
功能标题酶(str){let titlecasesentence=str.split(“”);titlecasesence=titlecasecence.map((单词)=>{const firstletter=word.charAt(0).toUpperCase();word=firstletter.concat(word.slice(1,word.length));返回词;});titlecasesence=titlecasecence.join('');返回标题句;}titlecase(“这是如何将单词的第一个字母大写”);
1
常量大写=str=>{if(typeofstr!=='string'){throw new Error('无效输入:输入必须为“string”类型);}返回str.trim().replace(/{1,}/g,“”).to下壳体().split(“”).map(单词=>单词[0].toUpperCase()+单词.slice(1)).join(“”);};
  • 使用清理输入字符串修剪()删除开头和结尾的空白
  • 将中间多余的空格替换为注册Exp

  • 规范化并全部转换至下壳体()信件

  • 将字符串转换为数组分裂关于空间

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

  • 联接(“”)带有空格的数组,并返回新大写的字符串

1

整个句子只能大写一行

“我的名字是约翰”.split(//g).map(val=>val[0].toUpperCase()+val.slice(1)).join('')

输出“我叫约翰”

1

一个很好的简单解决方案,使用纯JavaScript。J小提琴

函数initCap{var结果=“”;if((typeof(s)===“未定义”){返回结果;}s=s.到LowerCase();var words=s.split('');for(var i=0;i<单词长度;++i){结果+=(i>0?“:”)+words[i].substring(0,1).toUpperCase()+单词[i].子字符串(1);}返回结果;}
1

简单的一行程序使用字符串.原型.替换

常量字FirstUpper=str=>str.replace(/\s[a-z]| ^[a-z]/gi,a=>a.toUpperCase());console.log(wordsFirstUpper(“hello friend”))log(wordsFirstUpper(“大家好”)console.log(wordsFirstUpper(“0123但不是~!y'all”))

0
0

下面是一个如何子(substr)works:当您传入一个数字时,它会根据您提供的索引获取字符串的一部分:

console.log(“测试字符串”.substr(0));//没有什么不同console.log(“测试字符串”.substr(1));//从索引1开始(位置2)console.log(“测试字符串”.substr(2));

所以,他们把每个单词的第一个字母大写,然后再加上单词的其余部分。由于你只大写第一个字母,所以索引总是以1.

0

单词.substr(i),param表示单词的索引。此方法从索引等于的字母中剪切单词直到单词的末尾。您还可以添加另一个参数,如单词.substr(i,len),其中伦恩表示字符分割的长度。例如:“abcde”.substr(1,2)公元前.

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

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

常量大写名称=(arr)=>{arr.map((名称)=>{let upper=名称[0].toUpperCase()+名称.substr(1)console.log(上部)})

}

0
0

下面是另一种简洁的大写句子/名称/…的方法:

常量大写名称=(名称)=>{const names=name.split('')//['kouhadi','boubakr',essaddik']const newCapName=[]//声明空数组for(名称常量){newCapName.push(n.replace(n[0],n[0].toUpperCase()));}return newCapName.join('')}大写名称('kouhadi aboubakr essaaddik');//'库哈迪·阿布巴克·埃萨迪克
1
0

您可以使用以下代码行:

上函数(str){return[str.split('')[0].toUpperCase(),str.split('').slice(1,str.ssplit('').length).join(“”)].join}

基本上,它将分割所有字符,对其进行切片,创建一个没有第一个条目/字符的新数组,并用字符的大写形式替换第一个条目或字符。

(是的,这已经过测试,可以在Edge、Chrome和更新版本的Internet Explorer上使用。)

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

1
  • 添加空检查以获得更好的答案
    – 熔岩
    评论 2021年12月27日9:19
0

我认为这是最简单的方法

函数titleCase(str){返回str.to下壳体().split(“”).map((字)=>字[0].toUpperCase()+字.slice(1)).join(“”)}

您的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.