gpt4 book ai didi

javascript - 单元格范围内的 Google 电子表格脚本正则表达式

转载 作者:行者123 更新时间:2023-11-29 10:21:33 25 4
gpt4 key购买 nike

背景(可选):我在 VBA 中编写了一个工作脚本,我试图用 JS 为 Google Spreadsheets 编写,但是我在 regex 验证方面遇到了巨大的困难以每个细胞为基础。

在此 VBA 代码片段中,我设置了一系列数据,并根据先前定义的 RegEx 测试每个单元格。

Set rRange = Range(arrLetters1(i) & intRange1, arrLetters2(i) & intRange2)

For Each rCell In rRange.Cells
If re.Test(rCell) Then
rCell.Interior.Color = RGB(0, 250, 0)
Else
Cells((intRange1 - 1), rCell.Column).Interior.Color = RGB(250, 0, 0)
rCell.Interior.Color = RGB(250, 0, 0)
End If
Next rCell

我很好奇的是,实际的 JavaScript 函数允许我查看相同的范围并执行相同的操作。这是我拥有的:

var re = "[a-z]+"
var rRange = sheet.getRange(arrLetters1(i) + intRange1, arrLetters2(i) + intRange2)

for (var rCell in rRange) {
if (rCell //is a "re" match) {
//do some code
}
} else {
//do something else
}

最佳答案

好的,快速浏览一下,您似乎想要检查一系列单元格中的值,将它们与正则表达式进行比较,并根据结果更改单元格颜色。请记住,我之前没有使用过 google docs api,看起来您现有的代码只有几个小问题。

首先,您需要正确创建正则表达式。

你的线路:

var arrPatterns = new Array("^([A-Z]{2}(-[0-9]{5}){4})$", "^[A-Z]{2}$", "^[0-9]{5}$", "^[a-z]{1,}$", "^\(\d\d\d\) \d\d\d-\d\d\d\d$", "^([a-z0-9]{1,}[,]{0,}){1,}$", "^(\d\d?:\d\d[aApP][mM] - \d\d?:\d\d[aApP][mM])|(Closed)|(All Day)$");

变成:

var arrPatterns = [/^([A-Z]{2}(-[0-9]{5}){4})$/, /^[A-Z]{2}$/, ... /^(\d\d?:\d\d[aApP][mM] - \d\d?:\d\d[aApP][mM])|(Closed)|(All Day)$/];

那里的两个更改是删除 new Array 以支持仅使用 [ ] 的文字数组语法(可选但被认为是好的做法),并替换引号带有正斜杠的数组字符串(正则表达式文字语法)。结果是一组正则表达式对象而不是字符串。这将允许您实际执行类似 re.test("some string"); 的操作,就像您在评估代码中所做的那样。

其次,您需要遍历单元格范围,获取它们的值并进行比较。快速检查 documentation告诉我 sheet.getRange 返回一个 Range 对象。范围对象有一个 getValues 方法,该方法返回单元格值数组 (array[][])。

所以一些快速近似的代码是你想要的:

var rRange = sheet.getRange(arrLetters1(i) + intRange1, arrLetters2(i) + intRange2);
var values = rRange.getValues();
var re = arrPatterns[0];

var row, col;
for (row = 0; rows < values.length; row++) {
for (col = 0; col < values[row].length; col++) {
if (re.test(values[row][col])) {
/*do passes regex, looks like you probably need to pass the row/col to getCell
to get a range with the desired cell in it and then call setBackgroundColor on
that range. I'm also leaving looping through your array of regular expressions to you,
as it looked like you have a dependency on the expression being used and the array of
letters i didn't take the time to understand.*/
}
else {
//do fails regex
}
}
}

关于javascript - 单元格范围内的 Google 电子表格脚本正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10756966/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com