用 sheet 名称替换 excel 公式的正则表达式
Regex to replace excel formula with sheet name
您好,我正在尝试编写一个正则表达式来替换 excel 公式中出现的单元格名称,并用别名代替 sheet 名称。我正在使用 Js XLS 进行解析 excel。
例如:
+AA74/AVERAGE('b'!Z40:AA40)
需要输出
+a_AA74/AVERAGE(b_Z40:b_AA40)
当前输出
+a_AA74/AVERAGE(b_Z40:a_AA40)
其中'a'是当前写公式的sheet,'b'是其他的名字sheet.I想在前面追加sheet名字每个单元格名称。
但在这种类型的公式范围内,公式应包含起始范围 sheet 名称。
我正在使用的当前代码
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, ""+'a_'+"");
您可以使用
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
。
您好,我正在尝试编写一个正则表达式来替换 excel 公式中出现的单元格名称,并用别名代替 sheet 名称。我正在使用 Js XLS 进行解析 excel。 例如:
+AA74/AVERAGE('b'!Z40:AA40)
需要输出
+a_AA74/AVERAGE(b_Z40:b_AA40)
当前输出
+a_AA74/AVERAGE(b_Z40:a_AA40)
其中'a'是当前写公式的sheet,'b'是其他的名字sheet.I想在前面追加sheet名字每个单元格名称。 但在这种类型的公式范围内,公式应包含起始范围 sheet 名称。
我正在使用的当前代码
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, ""+'a_'+"");
您可以使用
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
。