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

JavaScript用正则从pandas公式字符串提取指定标识符key生成哈希对象

实现方案

核心思路

  • 先基于给定的标识符数组locatedDfs构造全局正则,匹配所有符合[标识符]['[键名]']格式的片段,同时捕获标识符名和对应的键名
  • 遍历所有匹配结果,逐层构建初始化对象,重复匹配的键会自动去重,最终每个键的值设为空字符串

完整实现代码

function generateInitObj(formulaStr, locatedDfs) {
  // 构造正则:匹配指定标识符开头的['xxx']格式取值逻辑
  const regex = new RegExp(`(${locatedDfs.join('|')})\\['([^']+)']`, 'g');
  const result = {};
  let match;
  
  // 遍历所有匹配结果
  while ((match = regex.exec(formulaStr)) !== null) {
    const identifier = match[1];
    const key = match[2];
    // 初始化标识符对应的对象
    if (!result[identifier]) {
      result[identifier] = {};
    }
    // 赋值为空字符串,重复键会自动覆盖不影响结果
    result[identifier][key] = '';
  }
  return result;
}

测试用例

// 输入示例
const formula = "csv['Date']+env['filename']+csv['Spend']";
const locatedDfs = ['csv','env'];
console.log(generateInitObj(formula, locatedDfs));

运行输出:

{
    csv: {Date:'',Spend:''},
    env: {filename: ''}
}

扩展说明

  • 如果公式里存在csv.Date这种点取值的写法,可以调整正则为(${locatedDfs.join('|')})(?:\\['([^']+)']|\\.(\\w+)),同时调整捕获键名的逻辑即可兼容两种取值写法
  • 如果需要支持双引号包裹的键,把正则里的'替换成['"]即可

内容的提问来源于stack exchange,提问作者Shivam Sahil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 14:57:04