Google应用程序脚本(JavaScript)正则表达式拆分电子表格单元格引用
我目前正在寻找一个函数,将字符串电子表格单元格引用拆分为列/行(字母/数字)组件 我目前使用的公式是:Google应用程序脚本(JavaScript)正则表达式拆分电子表格单元格引用,javascript,regex,google-apps-script,Javascript,Regex,Google Apps Script,我目前正在寻找一个函数,将字符串电子表格单元格引用拆分为列/行(字母/数字)组件 我目前使用的公式是: function reTest() { var re = /(\$?[A-Za-z]+)(\$?[0-9]+)/g; var cells = ['A1', 'AA1', 'A12', 'A$1', 'AA$1', 'A$12', '$A1', '$AA1', '$A12', '$A$1', '$AA$1', '$A$12']; for (var i = 0; i < cell
function reTest() {
var re = /(\$?[A-Za-z]+)(\$?[0-9]+)/g;
var cells = ['A1', 'AA1', 'A12', 'A$1', 'AA$1', 'A$12', '$A1', '$AA1', '$A12', '$A$1', '$AA$1', '$A$12'];
for (var i = 0; i < cells.length; i++) {
Logger.log(re.exec(cells[i]));
}
}
但是,目前我的输出是:
[A1, A, 1]
null
[A12, A, 12]
null
[AA$1, AA, $1]
null
[$A1, $A, 1]
null
[$A12, $A, 12]
null
[$AA$1, $AA, $1]
null
坦率地说,我有点像一个Regex新手,但我不明白为什么这不能像预期的那样工作
欢迎所有积分,非常感谢。您需要删除
g
全局修饰符,只抓取第1组和第2组捕获的文本:
此代码:
function reTest() {
var re = /(\$?[A-Za-z]+)(\$?[0-9]+)/;
var cells = ['A1', 'AA1', 'A12', 'A$1', 'AA$1', 'A$12', '$A1', '$AA1', '$A12', '$A$1', '$AA$1', '$A$12'];
for (var i = 0; i < cells.length; i++) {
var m = re.exec(cells[i]);
if (m) {
Logger.log([m[1], m[2]]);
}
}
}
或者,您也可以通过添加锚来告诉正则表达式引擎匹配整个字符串:
var re = /^(\$?[A-Za-z]+)(\$?[0-9]+)$/;
为什么需要删除全局修饰符:添加
g
时,regex.lastIndex
属性将前进到匹配结束的位置,因此,将从模式可以匹配的文本之前的位置查找下一个匹配项。因此,对我的代码进行了一次小的调整,使其正常工作
在正则表达式中引入管道运算符,并用RegExp.exec
替换string.match
function reTest() {
var re = /(\$?[A-Za-z]+)|(\$?[0-9]+)/g;
var cells = ['A1', 'AA1', 'A12', 'A$1', 'AA$1', 'A$12', '$A1', '$AA1', '$A12', '$A$1', '$AA$1', '$A$12'];
for (var i = 0; i < cells.length; i++) {
Logger.log(cells[i].match(re));
}
}
函数重新测试(){
变量re=/(\$?[A-Za-z]+)|(\$?[0-9]+)/g;
变量单元格=['A1'、'AA1'、'A12'、'A$1'、'AA$1'、'A$12'、'A1'、'AA1'、'A12'、'A$1'、'AA$1'、'A$12'];
对于(变量i=0;i
太棒了!我还找到了一个解决方案,正如你在上面发布的一样,有什么理由选择一种方法而不是另一种方法吗?/(\$?[a-Za-z]+)|(\$?[0-9]+)/g
将匹配字符串中任意位置出现的多个(\$?[a-Za-z]+)
或(\$?[0-9]+)
模式。如果字符串中有两个组,我建议/^(\$?[A-Za-z]+)(\$?[0-9]+)$/
。在$12()abc$A中找不到匹配项
var re = /^(\$?[A-Za-z]+)(\$?[0-9]+)$/;
function reTest() {
var re = /(\$?[A-Za-z]+)|(\$?[0-9]+)/g;
var cells = ['A1', 'AA1', 'A12', 'A$1', 'AA$1', 'A$12', '$A1', '$AA1', '$A12', '$A$1', '$AA$1', '$A$12'];
for (var i = 0; i < cells.length; i++) {
Logger.log(cells[i].match(re));
}
}