首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Regexp在循环中匹配Google脚本吗?

Regexp在循环中匹配Google脚本吗?
EN

Stack Overflow用户
提问于 2020-03-30 20:58:44
回答 1查看 435关注 0票数 1

我已经对这个问题做了几个小时了,我刚开始编写代码,所以请原谅,如果这是一个非常简单的问题。

所以我有一个文本列表,我想找出每个单元格中是否有来自另一个工作表的正则表达式。如果是,则粘贴文本旁边的正则表达式。

示例:第一行的:7063生物行星列日。->我想把“生物星球”写在右边的牢房里。(因为生物行星是第二张表中要测试的正则表达式之一)。

我写了这样的东西,但不知道什么是需要修正的:

代码语言:javascript
运行
复制
function ExpenseMatching() {
  
  var spreadsheet = SpreadsheetApp.getActive();
  var sheet1 = spreadsheet.getSheetByName("Import2");
  var sheet2 = spreadsheet.getSheetByName("Regular Expression");



 for ( i =1; i<24 ; i++)
 
 { 
//Browser.msgBox(i)

   var test1 = sheet2.getRange("A"+ i);
   var test2 = sheet1.getRange("A2");



      var test = new RegExp(test1).test(test2); 

 
 if (regexp==true)
 
                        { 
                          test1.copyTo(sheet1.getRange("I2"));
                   

                        Browser.msgBox(test)
                          
                         }     
                         
                         
                         else 
                         
                         {
                   
                         
       
                         }

}
     


}

谢谢您的提前帮助,各位!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-30 23:04:31

  • 您希望检索工作表Import2上的列"A“的值和工作表Regular Expression上的列"A”的值。
  • 您要检查Import2的值是否包括Regular Expression的值。当Import2的值包含Regular Expression的值时,您希望将Regular Expression的值放到Import2上的列"B“中。
  • 您希望使用Google脚本来实现这一点。

如果我的理解是正确的,那么这个答案呢?

修改要点:

  • 在您的脚本中,
    • if (regexp==true)不工作,并且会发生错误。因为没有声明regexp

代码语言:javascript
运行
复制
- From your question, I thought that you want to put the result value to the column "B" of `Import2`. But it seems that your script puts the value to the column "I" from `test1.copyTo(sheet1.getRange("I2"))`.
- Your script checks only "A2" of `Import2`.
- Each row is checked and copy the value in the for loop. In this case, the process cost will be high.

当以上要点反映到您的脚本中时,下面的修改脚本如何?

修改脚本:

代码语言:javascript
运行
复制
function ExpenseMatching() {
  var spreadsheet = SpreadsheetApp.getActive();
  var sheet1 = spreadsheet.getSheetByName("Import2");
  var sheet2 = spreadsheet.getSheetByName("Regular Expression");
  
  const values1 = sheet1.getRange(`A2:A${sheet1.getLastRow()}`).getValues();
  const values2 = sheet2.getRange(`A2:A${sheet2.getLastRow()}`).getValues();
  const res = values1.map(([r1]) => {
    for (let i = 0; i < values2.length; i++) {
      if (new RegExp(values2[i][0]).test(r1)) {
        return [values2[i][0]];
      }
    }
    return [""];
  });
  sheet1.getRange(2, 2, res.length, 1).setValues(res);
}
  • 我认为,在您的情况下,您也可以使用if (r1.includes(values2[i][0])) {而不是if (new RegExp(values2[i][0]).test(r1)) {。这可能会降低更多的成本。

注意:

  • 在这个修改中,结果值被放入Import2的列"B“中。
  • 请使用启用V8运行脚本。

参考文献:

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60939413

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档