Regex将excel公式替换为工作表名称

Regex to replace excel formula with sheet name

本文关键字:工作 替换 excel Regex      更新时间:2023-09-26

嗨,我试图写一个正则表达式,以取代在代替表名别名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冒号
  • ([A-Z]+'d+) -第2组捕获1+大写ASCII字符后面跟着1+数字

在替换中,我们检查组1是否匹配(=参与了匹配)。如果是,我们将b_添加到捕获的内容中,如果不是,我们将a_添加到A中。