5239

如果字符串的第一个字符是一个字母,如何使其大写,但不改变其他任何字母的大小写?

例如:

  • “这是一个测试”“这是一个测试”
  • “埃菲尔铁塔”“埃菲尔铁塔”
  • “/index.html”“/index.html”
  • 21
    强调有一个名为下芯管柱这包括这个和其他一些很棒的工具。
    ——亚伦
    2013年4月15日19:16
  • 4
    对于那些使用角度的人,有一个标题框管道:angular.io/api/common/TitleCasePipe角管 2021年1月27日20:54
  • 对于那些不知道堆栈溢出是如何工作的人:解决建议作为“答案”发布到页面上。任何未解决的建议、澄清请求和单独/相关超链接都可以作为问题下的评论发布。 2021年6月16日23:17

106答案106

重置为默认值
1

该方法将获取一个值,然后将其拆分为一个字符串数组。

const firstLetterToUpperCase=值=>{返回值.替换(value.split(“”)[“0”],//拆分stirng并获取第一个字母价值.split(“”)[“0”].toString().toUpperCase()//拆分字符串并获取第一个字母以替换为大写值);};
1
  • 2
    你能补充一下上述代码的功能吗?这将非常有用,并将提高你的回答质量。 2019年7月18日17:14
1
功能帽(输入){return input.replace(/[\.\r\n\t\:\;\?\!]\W*(\W)/g,函数(match,capture){//对于文本中的其他句子return match.toUpperCase();}).replace(/^\W*\W/,函数(匹配,捕获){//对于文本中的第一句话return match.toUpperCase();});;}var a=“嗨,亲爱的用户。这是一个简单的测试。回头见!\r\nbye”;控制台.log(cap(a));//输出:您好,亲爱的用户。这是一个简单的测试。再见!//再见
1
  • 问题是:“如何在JavaScript中使字符串的第一个字母大写?”这似乎很有价值每一句话. 2021年1月6日22:46
1

使用RamdaJ的另一种方法是函数式编程方法:

第一资本(str){const fn=p=>R.toUpper(R.head(p))+R.tail(p);返回fn(str);}

字符串中包含多个单词:

首字母AllWords(str){const fn=p=>R.toUpper(R.head(p))+R.tail(p);return R.map(fn,R.split('',str)).join('');}
1

然而,仅仅因为你可以,并不意味着你应该这样做。它需要ECMAScript 6,因为代码使用数组破坏.

常量大写首字母=s=>{const type=s的类型;if(键入!==“string”){throw new Error(`需要字符串,但收到${type}`);}const[firstChar,…remainingChars]=s;return[firstChar.toUpperCase(),…remainingChars].join(“”);};
1

这就是我宗教上使用的:

函数大写Me(str,force){str=力?str.到LowerCase():str;返回str.replace(/(\b)([a-zA-Z])/g,函数(firstLetter){return firstLetter.toUpperCase();});}var firstName=大写Me($firstName.val());
1
  • 4
    在我看来,这看起来很恶心——事实上,我认为为任何方法添加一个标志以使其执行不同的行为都有点愚蠢。考虑var s=大写Me('some RANDOM string',true);-代码的读者不会知道真的意味着不读取功能实现。如果您想让函数执行其他操作,请将其写入另一个函数,而不是使用魔法标志或参数重载方法。 2014年10月23日4:50
1

编辑:我喜欢这个:

yourString.replace(/(^[a-z])/i,(str,firstLetter)=>firstLeter.toUpperCase())
1
  • 1
    这将使问题的最后一次测试失败。
    ——肖恩
    2022年4月29日15:29
1

注意:重要信息UTF-8使用可变长度编码,这意味着它支持单个字符最多4个字节,codePointAt(1)>>7表示prv codePoint是一个char,如果codePointAt(1)>>11,它表示我们得到了一个2字节的UTF 8消息,因此16和21是4字节UTF-8字符的指示符。所以codePointAt(4)>>21===0表示它是一个4字节的utf-8字符。所有这些检查都很昂贵,所以对所有字符串长度来说,最高效的方法是

const upperCaseFirstLatterUtf8=(str)=>{常量b=str.substr(0,4).normalize();return b[0].toUpperCase()+b.substr(1)+str.substra(4);}upperCaseFirstLatterUtf8('\u006E\u0303me!')

这是处理utf-8字符的唯一正确方法,正如解释的那样,它们的可变长度高达4位,这使用normalize,这相对昂贵,但即使检查所有字符代码,存档目标的唯一性能方法也不会更快。然后,我们将剩余的字符和大写的第一个字母返回为单个utf-32字符,因此它总是4位,并移位7位

1

charAt和toUpperCase:您可以使用charAt方法获取字符串的第一个字符,然后使用toUpperCase将其转换为大写。然后,可以连接字符串的其余部分。

函数大写首字母(str){return str.charAt(0).toUpperCase()+str.slice(1);}let inputString=“hello world”;let result=大写首字母(inputString);console.log(结果);//输出:Hello world

charAt和切片:另一种方法是使用slice获取从第二个字符到字符串末尾的子字符串,然后将其与大写的第一个字符连接。

函数大写首字母(str){return str.slice(0,1).toUpperCase()+str.slices(1);}let inputString=“hello world”;let result=大写首字母(inputString);console.log(结果);//输出:Hello world
1

在JavaScript中,您可以通过将字符串拆分为一个单词数组,将第一个单词的第一个字母大写,然后将这些单词重新连接到字符串中来实现这一点

函数大写首字母(str){str=str.charAt(0).toUpperCase()+str.slice(1);//将单词连接回字符串返回str;}

//示例用法:

console.log(大写FirstLetter(“这是一个测试”);//输出:“这是一个测试”console.log(大写首字母(“埃菲尔铁塔”);//输出:《埃菲尔铁塔》console.log(大写FirstLetter(“/index.html”));//输出:“/index.html”

此函数大写首字母将字符串作为输入,使用空格字符作为分隔符将其拆分为一个单词数组,将第一个单词的第一个字母大写,然后将这些单词重新连接到一个带空格的字符串中。

1
  • 如果没有相关性,你为什么要分裂成单词?s.charAt(0).toUpperCase()+s.slice(1)工作原理相同,不需要额外的CPU周期和内存来创建基本上没有使用的阵列。
    ——VLAZ公司
    4月5日14:03
1

这是一个简单的方法。

函数大写(单词){return word.substring(0,1).toUpperCase()+word.substring(1).toLowerCase(;}

您可以创建一个以单词字符串作为输入的函数。您可以使用Substring类来提供字符串的第一个字符至UpperCase()将该字符大写。

然后将字符串的其余部分与字符串减去应用至下壳体()方法。

通常,您将使用两个值subString(子字符串)类。字符串拼接的起始位置和结束位置,但如果只为subString(子字符串)中的类将从该值拼接到字符串的末尾(就像我们在第二种情况下得到的一样),并记住subString(子字符串)类是零索引的。

0

这是一个漂亮而干净的版本;

var str=“”;return str.replace(新RegExp('^'+str[0]+''),str[0].toUpperCase());

结果:

这是测试-->这是测试

0

如果需要所有单词都以大写字母开头,可以使用以下功能:

常量大写字母=(s)=>{return s.trim().split(“”).map(i=>i[0].toUpperCase()+i.substr(1)).reduce((ac,i)=>`${ac}${i}`);}

例子:

log(`result:${capitalLetters(“这是一个测试”)}`)//结果:“这是一项测试”
1
  • 1
    这不是问题所问的。
    ——肖恩
    2022年4月29日15:38
0

你应该这样做:

让text=“小写”;text=text.charAt(0).toUpperCase()+text.substring(1,text.length);
0

我更喜欢使用面向函数编程的解决方案(映射数组):

数组.from(str).map((字母,i)=>i==0?letter.toUpperCase():letter).join('');
0

//只将多个单词的第一个字符大写var cfc=(str,fs='',es='')=>{//str=string,fs=第一个分隔符,es=结束分隔符var str=str.split(fs);变量str2=[];str.find((项)=>{const a=item.charAt(0).toUpperCase()+item.slice(1).toLowerCase(;str2.推(a);});返回str2.join(es);}const str=“stRing1#sTRIng2#strING3”;console.log(cfc(str,'#','@'));//输出:弦1@弦2@字符串3console.log(cfc(str,'#',''));//输出:String1 String2 String3

-1

在循环中:

函数大写FirstIterative(数组){设res=[];for(设索引=0;索引<array.length;索引++){const元素=数组[索引];res.push(element.charAt(0).toUpperCase()+element.slice(1));}返回res;}

递归:

函数capitalieFirst(数组){if(数组长度===1){return[数组[0][0].toUpperCase()+数组[0].substr(1)];}const res=大写首字母(array.slice(0,-1));常量字符串=array.slice(array.length-1)[0][0].toUpperCase()+array.slice(数组.length-1)[0].substr(1);res.push(字符串);返回res;}

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