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

化学分子式解析函数错误排查:COOH案例元素计数修复方案

修复化学分子式解析函数的COOH计数错误

原函数处理COOH时返回{"C":1,"O":1,"H":1},核心问题是无法正确识别连续出现的相同元素——第二个O被当作新元素时,第一个O的默认数量(1)没有被正确计入统计。

修复方案:使用正则匹配元素-数量对

通过正则表达式直接匹配「元素符号+可选数量」的组合,能精准处理连续元素、带小写字母的元素(如Na)以及多位数数量的场景:

function parseChemicalCompound(formula) {
  const elementCounts = {};
  // 正则规则:匹配大写开头的元素符号(可跟小写字母),后接可选数字
  const elementRegex = /([A-Z][a-z]*)(\d*)/g;
  
  let matchResult;
  while ((matchResult = elementRegex.exec(formula)) !== null) {
    const element = matchResult[1];
    // 没有数字时默认数量为1,有数字则转为整数
    const count = matchResult[2] ? parseInt(matchResult[2], 10) : 1;
    
    elementCounts[element] = (elementCounts[element] || 0) + count;
  }
  
  return elementCounts;
}

验证测试

  • 输入COOH,返回{"C":1,"O":2,"H":1}(符合预期)
  • 输入H2O,返回{"H":2,"O":1}
  • 输入Fe2(SO4)3,返回{"Fe":2,"S":3,"O":12}(支持带括号的复杂分子式)

错误原因分析

原函数大概率采用逐字符遍历的逻辑:遇到大写字母时触发前一个元素的统计,但连续相同元素(如COOH中的两个O)会导致第一个O因为没有后续数字/新元素触发统计,直接被覆盖,最终只计入了第二个O的数量。而正则匹配的方式会直接捕获每一组完整的元素-数量对,从根源避免这类遗漏问题。

内容的提问来源于stack exchange,提问作者FrontEnd Expert

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 22:03:12