regex - 带有 RegExp 通配符的 Google App 脚本搜索
问题描述
我有一个带有文本的 col (var A1String)
Regenerist 抗衰老微雕精华
梅加拉亚草和塑料(棕色和粉红色)
梅加拉亚草和塑料(棕色和粉红色)
Dentastix 大品种零食(7 件,成人)
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
不用说,搜索没有返回预期的结果。
有人可以指导我吗?
提前致谢
解决方案
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)]]
推荐阅读
- angular - 在 Angular 中导入库/模块
- c++ - 我被困在试图扭转这个公式
- java - 如何在@PostConstruct 中模拟 bean?
- android-studio - 更新到 android studio 3.3 后,使用 android studio 构建的 apk 无法正常工作
- c# - Web API 更改 JSON 解析器
- python - 智能计算距离(稀疏?)numpy.meshgrid
- model-view-controller - mvc下拉列表不显示数据值
- react-native - 试图卸载 rn-fetch-blob
- reporting-services - SSRS 报表在浏览器和报表生成器中的呈现方式不同
- common-lisp - Hunchentoot 是未知的处理程序