首页 > 解决方案 > 带有 RegExp 通配符的 Google App 脚本搜索

问题描述

我有一个带有文本的 col (var A1String)

  1. Regenerist 抗衰老微雕精华

  2. 梅加拉亚草和塑料(棕色和粉红色)

  3. 梅加拉亚草和塑料(棕色和粉红色)

  4. Dentastix 大品种零食(7 件,成人)

  5. 5 Star Magic Pro-Health 巧克力(补充装)

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

“抗衰老精华”

“五星级巧克力”

我正在尝试将键入的条目转换为带有通配符的正则表达式,以避免第 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');}

然后按如下方式搜索我的表(A1String):

var a = A1String.search(regex_repstring);

记录器输出为:

[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

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

有人可以指导我吗?

提前致谢

标签: regexgoogle-apps-scriptwildcard

解决方案


tl;博士

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

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

例子

我创建了一个测试表:

+-------------------------------------------------+-------------------+
| 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)]]

推荐阅读