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

Lodash处理含罗马数字字符串时camelCase格式化异常问题求助

Lodash处理含罗马数字字符串时camelCase格式化异常问题求助

嘿,这个问题我之前也碰到过!Lodash的camelCase函数默认逻辑是把字符串按分隔符拆分后,每个单词(除了第一个)都转成「首字母大写+其余小写」的格式,所以像"II"这种罗马数字会被当成普通单词处理,最终变成"Ii",确实不符合我们想要保留罗马数字大写的需求。

先还原下你的问题场景:

我尝试用Lodash的camelCase函数格式化字符串,但它修改了内容本身:

_.camelCase("Gladiator II");
// 输出: 'gladiatorIi'

请问怎么正确处理这种情况?

给你两个实用的解决思路:

  • 自定义驼峰格式化函数:我们可以针对性处理罗马数字,让它在格式化后保持大写形式。这里写了一个简单版本的实现,你可以根据自己的需求调整细节:

    function customCamelCase(str) {
      // 拆分字符串为单词数组
      return str.split(' ').map((word, index) => {
        // 判断当前单词是否是罗马数字(简化正则,覆盖常见的I/II/III/IV等场景)
        if (/^[IVXLCDM]+$/i.test(word)) {
          // 第一个单词全小写,后续罗马数字保持大写
          return index === 0 ? word.toLowerCase() : word.toUpperCase();
        }
        // 普通单词按常规驼峰规则处理
        return index === 0 
          ? word.toLowerCase() 
          : word.charAt(0).toUpperCase() + word.slice(1).toLowerCase();
      }).join('');
    }
    
    // 测试效果
    customCamelCase("Gladiator II");
    // 输出: 'gladiatorII'
    
  • 预处理字符串后再用Lodash的camelCase:如果你的罗马数字都是跟在空格后面,可以先给罗马数字加个特殊前缀,让camelCase处理时保留它的大写:

    const originalStr = "Gladiator II";
    // 把空格后的罗马数字替换成「_大写罗马数字」的形式
    const processedStr = originalStr.replace(/(\s[IVXLCDM]+)/i, match => `_${match.trim().toUpperCase()}`);
    // 用Lodash处理
    const result = _.camelCase(processedStr);
    // 输出: 'gladiatorII'
    

如果需要支持更复杂的罗马数字格式(比如带小写字母、特殊组合),只需要调整正则表达式的匹配规则就可以啦。

备注:内容来源于stack exchange,提问作者user2069452

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 02:53:16