使用Google Scrips和Regex返回匹配列

Dyl*_*ton 6 javascript regex lookup google-apps-script

我一直在为我的Google工作表编写脚本,该脚本从单元格中获取完整字符串,并将其与第二个工作表上的关键字列表进行比较,这应该返回列号。还有更多要走,但我遇到了一些麻烦。

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

我在“标签的”工作表偏移量中有单元格。但它检查正确的范围。

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{ }

    }          
  }   
}
Run Code Online (Sandbox Code Playgroud)

我希望如果我在第一张纸的A2中键入“海里有很多鱼”,它将返回2作为在第一张纸的A1中找到的列引用。

我在下面共享了表格的可编辑副本。

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

谢谢 :)

Sou*_*ria 6

几件事情:

  • new RegExp()应包含CurrentValue的和测试的“叙事”(原来的代码是做反向)
  • 你不需要的单词边界\b的内部new RegExp()功能

尝试这个 -

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{ }
    }          
  }   
}
Run Code Online (Sandbox Code Playgroud)

我已经在工作表中更新了相同的内容,并且现在可以正常工作了:)

  • 谢谢!我认为这可能是愚蠢的:)想知道,为什么不需要边界这个词?我认为这将意味着部分匹配/单词。谢谢 :) (2认同)