javascript - 正则表达式用工作表名称替换 Excel 公式

标签 javascript regex js-xlsx

嗨,我正在尝试编写一个正则表达式,用别名代替工作表名称来替换 Excel 公式中出现的单元格名称。我正在使用 Js XLS 来解析 excel。 例如:

 +AA74/AVERAGE('b'!Z40:AA40)

需要输出

 +a_AA74/AVERAGE(b_Z40:b_AA40)

当前输出

 +a_AA74/AVERAGE(b_Z40:a_AA40)

其中“a”是写入公式的当前工作表,“b”是其他工作表的名称。我想在每个单元格名称之前附加工作表名称。 但在这种类型的公式中,范围公式应包含起始范围表名称。

我当前使用的代码

var re = new RegExp("A.","g");
res = res.replace(re, "a_");
var re = new RegExp("A!","g");
res = res.replace(re, "a_");
var re = new RegExp("'B'!","g");
res = res.replace(re, "b_");
var re = new RegExp("'B'.","g");
res = res.replace(re, "b_");
res = res.replace(/\s/g,"");
res = res.replace(/(^|[^_A-Z])([A-Z]+\d+)/g, "$1"+'a_'+"$2");

最佳答案

您可以使用

var re = /^\+A!?|'b'!([A-Z]+\d+):([A-Z]+\d+)/g;
var s = "+AA74/AVERAGE('b'!Z40:AA40)";
var res = s.replace(re, function(m, g1, g2) {
  if (g1) {
  	return 'b_'+g1 + ":b_" + g2;
  } else return '+a_A';
});
console.log(res);

^\+A!?|'b'!([A-Z]+\d+):([A-Z]+\d+) 正则表达式匹配:

  • ^\+A!? - +A+A! 位于字符串开头
  • | - 或
  • 'b'! - 文字字符序列
  • ([A-Z]+\d+) - 第 1 组捕获 1 个以上大写 ASCII 字符,后跟 1 个以上数字
  • : - 冒号
  • ([A-Z]+\d+) - 第 2 组捕获 1 个以上大写 ASCII 字符,后跟 1 个以上数字

在替换中,我们检查第 1 组是否匹配(=参加比赛)。如果是,我们将 b_ 添加到捕获的内容中,如果没有,我们只需将 a_ 添加到 A 中。

关于javascript - 正则表达式用工作表名称替换 Excel 公式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40236303/

相关文章:

javascript - 异步等待未按预期工作

javascript - 如何在其他任务中从 grunt-prompt 访问用户输入

regex - 是否有 :s[ubstitute] in Vim that will not save the pattern? 的标志

javascript - js-xlsx 如何重新排列列?

javascript - 刷新或重新加载页面后完整日历事件消失

javascript - 如何更改页面上所有img src的一部分?

javascript - REGEX:在 Javascript 中的大写字母之间追加单个空格

python - 如何检查 python 字符串以查看它是否在 HH :MM time format? 中

javascript - sheetJS : How should the cell object look when you want to transform milliseconds to h:mm?

javascript - 如何使用 JS-XLSX 创建内部链接