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

JavaScript实现带例外词规则的单词首字母大写功能

JavaScript 首字母大写(含指定例外词)实现方案

现存问题

原有实现存在3个核心缺陷,导致输出不符合预期:

  • 正则通过(?!^)跳过了字符串起始位置的匹配,无法保证句首单词首字母始终大写
  • 仅处理了部分小写字母的大写转换,没有对单词除首字母外的字符做小写归一化
  • 没有区分例外词的位置,非句首的大写例外词(比如示例里的THE)不会被转成小写

原有错误实现代码:

function capitalizeFirst(str) {
  return str.replace(/(?!^)\b(?!(?:of|the)\b)([a-z])/g, m => m.toUpperCase());
}


console.log(capitalizeFirst('the fox JUMP off of THE street'));

预期规则

  • 例外词(如of、the)仅在作为句首单词时首字母大写,其余位置统一全小写
  • 所有单词除首字母外的剩余字符统一转为小写
  • 非句首的非例外词首字母大写
  • 示例输入the fox JUMP off of THE street对应正确输出为The Fox Jump Off of the Street

正确实现代码

// 配置不需要大写的例外词,可按需扩展
const LOWERCASE_WORDS = new Set(['of', 'the']);

function capitalizeFirst(str) {
  return str.replace(/\b([a-zA-Z]+)\b/g, (word, _, offset) => {
    const lowerWord = word.toLowerCase();
    // 句首单词/非例外词需要首字母大写
    if (offset === 0 || !LOWERCASE_WORDS.has(lowerWord)) {
      return lowerWord[0].toUpperCase() + lowerWord.slice(1);
    }
    // 非句首的例外词直接返回全小写
    return lowerWord;
  });
}

// 测试验证
console.log(capitalizeFirst('the fox JUMP off of THE street'));
// 输出结果:The Fox Jump Off of the Street

实现逻辑说明

  • 用正则\b([a-zA-Z]+)\b匹配字符串中所有独立单词,回调中可拿到单词内容、单词在原字符串的起始偏移量offset
  • 每个单词先统一转成全小写,从根源解决原逻辑没有归一化字符大小写的问题
  • 通过offset === 0判断是否为句首单词,句首单词无论是否属于例外词,都执行首字母大写逻辑
  • 非句首单词如果不在例外词集合中,执行首字母大写逻辑;如果属于例外词,直接返回全小写形式
  • 用Set存储例外词,查询时间复杂度为O(1),后续扩展例外词直接往集合中添加即可

内容的提问来源于stack exchange,提问作者Robert Smith

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 05:30:53