Return 使用 Google 脚本和正则表达式匹配列

Return Matching Column using Google Scrips and Regex

我一直在为我的 google sheet 编写一个脚本,它从一个单元格中获取完整的字符串,然后将它们与第二个关键字列表进行比较 sheet,这应该 return 列号。还有很多事情要做,但我遇到了一些麻烦。

我已经尝试了几种方法,现在我正在尝试正则表达式。我认为我正在正确使用它。我的逻辑是,如果关键字的正则表达式匹配原始查询的任何完整单词,则 return true 和列号。

我得到了 "Tag's" sheet 偏移量中的单元格。但它会检查正确的范围。

function returnTag(narration){
  var main = SpreadsheetApp.getActiveSpreadsheet();
  var tagsheet = main.getSheetByName('Tags');
  var numRows = tagsheet.getLastRow();
  var numCols = tagsheet.getLastColumn();
  var range = tagsheet.getRange(6, 2, numRows-5, numCols-1);
  var row;
  var col;

  for (var col = 1; col <= numCols-1; col++) {
    for (var row = 1; row <= numRows-5; row++) {
      var currentValue = range.getCell(row,col).getValue();
      var regExp = new RegExp("\b"+narration+"\b","gi");
      if(regExp.test(currentValue)) {
       return(col);
      }
      else{ }

    }          
  }   
}

我希望如果我在第一个 sheet 的 A2 中键入 "There are plenty of fish in the sea",它将 return 2 作为在第一个 [=34] 的 A1 中找到的列引用=].

我在下面分享了 sheet 的可编辑副本。

https://docs.google.com/spreadsheets/d/19FDT6ximWg4AcGzDTuqC4AYIW4MgXFwlUH0wYfGQi8s/edit?usp=sharing

谢谢:)

两件事:

  • new RegExp() 应该包含 currentValue 并测试 "narration"(您的原始代码正在执行相反的操作)
  • 您不需要 new RegExp() 函数中的单词边界 \b

试试这个 -

function returnTag(narration){
  var main = SpreadsheetApp.getActiveSpreadsheet();
  var tagsheet = main.getSheetByName('Tags');
  var numRows = tagsheet.getLastRow();
  var numCols = tagsheet.getLastColumn();
  var range = tagsheet.getRange(6, 2, numRows-5, numCols-1);
  var row;
  var col;
  for (var col = 1; col <= numCols-1; col++) {
    for (var row = 1; row <= numRows-5; row++) {
      var currentValue = range.getCell(row,col).getValue();
      var regExp = new RegExp(currentValue,"gi");
      if(regExp.test(narration)) {
       return(col);
      }
      else{ }
    }          
  }   
}

我在 sheet 中更新了同样的内容,它也已共享并且现在有效:)