Google 使用 RegExp 通配符的应用脚本搜索

Google App Script Search with RegExp wild character

我有一个包含文本的列 (var A1String)

  1. Regenerist 抗衰老微塑精华液

  2. Meghalaya 草和塑料(棕色和粉色)

  3. Meghalaya 草和塑料(棕色和粉色)

  4. Dentastix Large Breed Treat(7 件,成人)

  5. 5星魔法健康巧克力(补充装)

在单独的列中,我输入 Search_Keys (var repstring) - 例如

"Anti Ageing Serum"

“5 星巧克力”

我正在尝试将我键入的条目转换为带有通配符的正则表达式,以避免第 1 行中的 "Micro Sculpting" 或第 5 行中的 "Magic Pro-Health"。

我尝试了以下代码:

var split_repstring = repstring.split(' ');
var regex_repstring = new RegExp(split_repstring[0]+"\?",'g');
for (var e=1;e<split_repstring.length;e++)
{regex_repstring=new RegExp(regex_repstring+split_repstring[e]+("\?"),'g');}

然后搜索我的 table (A1String) 如下:

var a = A1String.search(regex_repstring);

Logger 输出为:

[18-06-15 10:16:58:090 PDT] [Anti, Ageing, Serum]
[18-06-15 10:16:58:091 PDT] 3.0
[18-06-15 10:16:58:092 PDT] ///Anti\?/gAgeing\?/gSerum\?/g

不用说,搜索没有返回预期的结果。

有人能指导我吗?

提前致谢

tl;博士

您可以构建我认为您正在寻找的正则表达式,只需使用 String.prototype.replace()

new RegExp(repstring.replace(/ /g, ' .*'))

例子

我创建了一个测试 table:

+-------------------------------------------------+-------------------+
| 1. Regenerist Anti Ageing Micro Sculpting Serum | Anti Ageing Serum |
| 2. Meghalaya Grass & Plastic   (Brown & Pink)   | 5 Star Chocolate  |
| 3.  Meghalaya Grass & Plastic   (Brown & Pink)  |                   |
| 4. Dentastix  Large Breed Treat (7 Pcs, Adult)  |                   |
| 5. 5 Star Magic Pro-Health Chocolate  (Refill)  |                   |
+-------------------------------------------------+-------------------+

这是一个使用上述方法的脚本:

function search() {
  var sheet = SpreadsheetApp.getActiveSheet();

  var data = sheet.getRange(1, 1, 5).getValues()
  var queries = sheet.getRange(1, 2, 2).getValues();

  var queryRegexes = [];
  for (var i = 0; i < queries.length; i++) {
    queryRegexes[i] = new RegExp(queries[i][0].replace(/ /g, ' .*'));
  }

  for (var i = 0; i < queryRegexes.length; i++) {
    Logger.log('Results for ' + queryRegexes[0]);
    Logger.log(data.filter(function(entry) {
      return queryRegexes[i].test(entry);
    }));
  }
}

这是日志输出:

[18-06-15 11:28:11:387 PDT] Results for /Anti .*Ageing .*Serum/
[18-06-15 11:28:11:388 PDT] [[1. Regenerist Anti Ageing Micro Sculpting Serum]]
[18-06-15 11:28:11:389 PDT] Results for /Anti .*Ageing .*Serum/
[18-06-15 11:28:11:389 PDT] [[5. 5 Star Magic Pro-Health Chocolate  (Refill)]]