将字符串中的单词大写

IT技术 javascript string capitalization
2021-01-29 13:44:34

将字符串中的单词大写的最佳方法是什么?

6个回答
/**
 * Capitalizes first letters of words in string.
 * @param {string} str String to be modified
 * @param {boolean=false} lower Whether all other letters should be lowercased
 * @return {string}
 * @usage
 *   capitalize('fix this string');     // -> 'Fix This String'
 *   capitalize('javaSCrIPT');          // -> 'JavaSCrIPT'
 *   capitalize('javaSCrIPT', true);    // -> 'Javascript'
 */
const capitalize = (str, lower = false) =>
  (lower ? str.toLowerCase() : str).replace(/(?:^|\s|["'([{])+\S/g, match => match.toUpperCase());
;

  • 修复了Marco Demaio的解决方案,其中前面带有空格的第一个字母不是大写。
capitalize(' javascript'); // -> ' Javascript'
  • 可以处理国家符号和带重音的字母。
capitalize('бабушка курит трубку');  // -> 'Бабушка Курит Трубку'
capitalize('località àtilacol')      // -> 'Località Àtilacol'
  • 可以处理引号和大括号。
capitalize(`"quotes" 'and' (braces) {braces} [braces]`);  // -> "Quotes" 'And' (Braces) {Braces} [Braces]
@Dr.X,请参阅附加组件'CHECK THIS OUT'.capitalize(true) -> "Check This Out"心智true参数。
2021-03-16 13:44:34
@ SeaWarrior404,你说得对,用 es6 语法更新了我的答案,添加了 jsdoc 和一些标点符号处理
2021-03-16 13:44:34
处理大写字符串的一些改进:) ** String.prototype.capitalize = function() { return this.toLowerCase().replace(/(?:^|\s)\S/g, function(a) { return a.toUpperCase(); }); }; **
2021-03-24 13:44:34
请不要更改现有对象的原型。
2021-03-26 13:44:34
regexp 的工作原理类似于“将所有非空白字符 (\S) 放在字符串 (^) 的开头或任何空白字符 (\s) 之后,并将它们大写”
2021-04-03 13:44:34

使用 ES6 的箭头函数将字符串中的单词大写的最短实现如下:

'your string'.replace(/\b\w/g, l => l.toUpperCase())
// => 'Your String'

ES5兼容实现:

'your string'.replace(/\b\w/g, function(l){ return l.toUpperCase() })
// => 'Your String'

正则表达式基本上匹配给定字符串中每个单词的第一个字母,并仅将该字母转换为大写:

  • \b匹配单词边界(单词的开头或结尾);
  • \w匹配以下元字符 [a-zA-Z0-9]。

对于非 ASCII 字符,请参考此解决方案

'ÿöur striñg'.replace(/(^|\s)\S/g, l => l.toUpperCase())

此正则表达式匹配给定字符串中的第一个字母和每个以空格开头的非空格字母,并仅将该字母转换为大写:

  • \s匹配一个空白字符
  • \S匹配一个非空白字符
  • (x|y)匹配任何指定的替代项

/(?:^|\s)\S/g尽管g我们的正则表达式中标志无论如何都不会通过设计捕获子组,可以在此处使用非捕获组,如下所示

干杯!

这似乎不适用于北欧字符 ä、ö 和 å。例如päijät-häme变成PäIjäT-HäMe
2021-03-19 13:44:34
你能在答案中解释正则表达式是如何工作的吗?(每块的含义)
2021-03-20 13:44:34
@MarkusMeskanen 的示例应该更改为Päijät-Häme,但至少在 Chrome 中,空格不包含破折号 (-),因此名称的第二部分不大写。可以固定为/(^|\s|-)\S/g.
2021-03-24 13:44:34
如果解释在里面,我会选择它作为答案,而不是作为人们可能会错过的评论。
2021-03-26 13:44:34
对于包含变音符号/非拉丁字符的国际内容,此解决方案不是一个好的解决方案。EisbäRen例如,是一种结果。
2021-03-26 13:44:34
function capitalize(s){
    return s.toLowerCase().replace( /\b./g, function(a){ return a.toUpperCase(); } );
};

capitalize('this IS THE wOrst string eVeR');

输出:“这是有史以来最糟糕的字符串”

更新:

看来这个解决方案取代了我的:https : //stackoverflow.com/a/7592235/104380

请注意,您的函数似乎错误地将重音字母大写,请参阅我的答案:stackoverflow.com/questions/2332811/capitalize-words-in-string/……我也对它进行了原型设计。
2021-03-13 13:44:34
我不喜欢原型制作,它有可能产生冲突,因为其他人也使用相同的名称来制作 String 原型。
2021-03-31 13:44:34

只要输入字符串中没有带重音的字母vsync 提供答案就可以工作

我不知道原因,但显然\bin regexp 匹配也重音字母(在 IE8 和 Chrome 上测试),所以像这样的字符串"località"会被错误地大写转换为"LocalitÀ"à字母被大写,因为正则表达式认为它是一个单词边界)

一个更通用的函数也适用于重音字母是这个:

String.prototype.toCapitalize = function()
{ 
   return this.toLowerCase().replace(/^.|\s\S/g, function(a) { return a.toUpperCase(); });
}

你可以这样使用它:

alert( "hello località".toCapitalize() );
它可能关心的人:沮丧的答案stackoverflow.com/questions/2332811/capitalize-words-in-string/...现在是这里的最佳答案。
2021-03-24 13:44:34
" javascript".toCapitalize() -> " javascript"
2021-03-26 13:44:34

一个简单、直接(非正则表达式)的解决方案:

const capitalizeFirstLetter = s => 
  s.split(' ').map(w => w.charAt(0).toUpperCase() + w.slice(1)).join(' ')
  1. 将字符串拆分为单词数组(通过空格分隔符)
  2. 将每个单词分解为单词中的第一个字符 + 其余字符
  3. 第一个字母转换为大写,其余保持原样
  4. 将 Array 连接回带空格的字符串
我认为你可以避免迭代,就这样做 function capitalize(s){ let _s = s.trim().toLowerCase(); return _s.charAt(0).toUpperCase() + _s.slice(1) }
2021-03-20 13:44:34