将字符串中的单词大写

2022-08-30 01:01:57

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


答案 1
/**
 * 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]

答案 2

使用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/gg

干杯!