Google 使用 RegExp 通配符的应用脚本搜索
Google App Script Search with RegExp wild character
我有一个包含文本的列 (var A1String)
Regenerist 抗衰老微塑精华液
Meghalaya 草和塑料(棕色和粉色)
Meghalaya 草和塑料(棕色和粉色)
Dentastix Large Breed Treat(7 件,成人)
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)]]
我有一个包含文本的列 (var A1String)
Regenerist 抗衰老微塑精华液
Meghalaya 草和塑料(棕色和粉色)
Meghalaya 草和塑料(棕色和粉色)
Dentastix Large Breed Treat(7 件,成人)
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)]]