正则表达式用表单名称替换excel公式

时间:2016-10-25 09:30:07

标签: 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");

1 个答案:

答案 0 :(得分:1)

您可以使用

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