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

