You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JavaScript中实现字符串首字母大写且括号内字符全大写的格式化?

解决方案:同时实现单词首字母大写与括号内全大写

我明白你的需求——既要让每个单词首字母大写,又要把括号里的内容全转成大写,而lodash的_.startCase确实帮你搞定了前者,但括号内的部分就鞭长莫及了。别担心,结合正则表达式或者原生JS的字符串处理就能解决这个问题,下面给你两种实用的方案:

方案一:基于Lodash + 正则替换(推荐)

这个方案在你现有代码的基础上扩展,先用Lodash处理整体的单词首字母大写,再用正则把括号内的内容转成大写,简单高效,还能处理多个括号的场景:

function formatTargetString(str) {
  // 先统一转小写,再用startCase实现单词首字母大写
  let processedStr = _.startCase(_.toLower(str));
  // 全局匹配所有括号内的内容,替换为大写形式
  return processedStr.replace(/\((.*?)\)/g, (match, group) => `(${group.toUpperCase()})`);
}

// 测试用例验证
console.log(formatTargetString("Laugh out Loud (lol)")); // 输出:Laugh Out Loud (LOL)
console.log(formatTargetString("Point of view (pov)")); // 输出:Point Of View (POV)
console.log(formatTargetString("What the hell")); // 输出:What The Hell
console.log(formatTargetString("Hello (foo) world (bar)")); // 输出:Hello (FOO) World (BAR)

原理说明:

  1. _.toLower(str)把整个字符串转成小写,避免原字符串中存在大小写混乱的情况;
  2. _.startCase(...)会自动把空格分隔的单词首字母大写,其他字母小写;
  3. 正则/\((.*?)\)/g是全局匹配所有括号内的内容(.*?是非贪婪匹配,避免多个括号时匹配出错),然后通过回调函数把捕获到的括号内文本转成大写,再重新包裹括号。

方案二:纯原生JavaScript实现(无依赖)

如果你的项目不想依赖Lodash,用原生JS也能实现同样的效果,步骤是先处理括号外的内容,再单独处理括号内的部分:

function formatTargetString(str) {
  // 第一步:处理括号外的单词首字母大写
  // 先移除所有括号内容,得到纯文本部分
  let plainText = str.replace(/\(.*?\)/g, '').trim();
  // 转小写后按空格拆分,逐个单词首字母大写
  let capitalizedPlain = plainText.toLowerCase().split(' ')
    .map(word => word ? word.charAt(0).toUpperCase() + word.slice(1) : word)
    .join(' ');

  // 第二步:处理括号内的内容(如果存在)
  let parenthesisMatches = str.match(/\(.*?\)/g);
  if (parenthesisMatches) {
    // 把每个括号内的内容转大写
    let processedParentheses = parenthesisMatches.map(match => 
      `(${match.slice(1, -1).toUpperCase()})`
    );
    // 拼接回处理后的纯文本
    return `${capitalizedPlain} ${processedParentheses.join(' ')}`;
  }

  // 没有括号的情况直接返回处理后的纯文本
  return capitalizedPlain;
}

// 测试验证
console.log(formatTargetString("Laugh out Loud (lol)")); // 输出:Laugh Out Loud (LOL)
console.log(formatTargetString("Point of view (pov)")); // 输出:Point Of View (POV)
console.log(formatTargetString("What the hell")); // 输出:What The Hell

原理说明:

  1. 先通过正则移除所有括号内容,单独处理剩余文本的单词首字母大写;
  2. 用match(/\(.*?\)/g)捕获所有括号内容,逐个转成大写;
  3. 最后把处理后的纯文本和括号内容拼接起来,得到最终结果。

注意事项

  • 如果你的字符串中存在嵌套括号(比如Hello (foo(bar))),上面的正则可能无法正确匹配,这种场景需要调整正则逻辑,但根据你的需求示例,应该不需要处理嵌套情况;
  • 方案一因为用了全局正则,处理多括号的场景更简洁,推荐优先使用。

内容的提问来源于stack exchange,提问作者Anna P

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 19:28:12