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
相关产品推荐
相关产品推荐

