我正在尝试使用 Google Apps 脚本 (Javascript) 从电子表格公式中提取有效的单元格引用和范围引用。
有效的单元格引用是一个或两个字母,后跟不以零开头的连续数字。字母或数字前面可以有也可以没有 $ 字符。整个引用不能以字母、数字或下划线(在这种情况下,它可能是电子表格函数或命名范围名称的一部分)或冒号(在这种情况下,它可能是范围参考)。
范围引用正则表达式 (rangeRefRe
)似乎运作良好;但我的单元格引用正则表达式(cellRefRe
) 未能找到匹配项。如果有人能指出我做错了什么,那就太好了。
function myFunction()
{
var formula = '=A100+B$2:2+INDIRECT("A2:B")+$C3-SUM($D$1:$E5)';
var fSegments = formula.split('"'); // I want to exclude references within double quotation marks
var rangeRefRe = /[^0-9a-zA-Z_$]([0-9a-zA-Z$]+?:[0-9a-zA-Z$]+)(?![0-9a-zA-Z_])/g;
var cellRefRe = /[^0-9a-zA-Z_$:](\${,1}[a-zA-Z]{1,2}\${,1}[1-9][0-9]*)(?![0-9a-zA-Z_:])/g;
var refResult;
var references = [];
for (var i = 0; i < fSegments.length; i += 2)
{
while (refResult = rangeRefRe.exec(fSegments[i]))
{
references.push(refResult[1]);
}
while (refResult = cellRefRe.exec(fSegments[i]))
{
references.push(refResult[1]);
}
}
Logger.log(references);
}
JavaScript 不支持正则表达式的这一部分:{,1}
。为了允许 0 或 1 次出现,需要{0,1}
,或者您可以将其替换为?
:
/[^0-9a-zA-Z_$:](\$?[a-zA-Z]{1,2}\$?[1-9][0-9]*)(?![0-9a-zA-Z_:])/g;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)