我的程序中有一个简单的查询字符串:
?username=someone@email.com&fname=
我想出了一个正则表达式,可以选择除所需数据之外的所有内容:
[^a-zA-Z0-9.@]|(username|fname)
我正在尝试使用javascript str.split()拆分查询中实际上不是数据的所有内容,例如:
let userinfo = global.location.search.split(/[^a-zA-Z0-9.@]|(username|fname)/).filter(Boolean);
不幸的是,当它运行时,我得到以下数组:
['username', 'someone@email.com', 'fname']
。
我希望仅['someone@email.com']
,因为“用户名”和“ fname”应该与正则表达式分开。
我已经在https://regex101.com/中对此进行了测试,它似乎可以正常工作,所以我不确定为什么它在JS中不起作用。
有什么想法吗?
答案 0 :(得分:2)
当您在与.split()
一起使用的正则表达式中有一个捕获组时,捕获的字符串将包含在结果数组中。
如果您需要一个组但又不想将其包括在结果中,请使用非捕获组(?:username|fname)
。
但是在这种情况下根本不需要这个小组。 /xxx|(yyy|zzz)/
与/xxx|yyy|zzz/
匹配相同,只是它们捕获的内容不同。
/[^a-zA-Z0-9.@]|username|fname/
答案 1 :(得分:0)
您需要使用正则表达式来执行此类任务,可以使用标准的URLSearchParams API
function getOldFileIDs() {
// Old date is 3 Hours
var oldDate = new Date().getTime() - 3600*1000*3;
var cutOffDate = new Date(oldDate).toISOString();
// Get folderID using the URL on google drive
var folder = DriveApp.getFolderById('XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');
var files = folder.searchFiles('modifiedDate < "' + cutOffDate + '"');
var obj = [];
while (files.hasNext()) {
var file = files.next();
obj.push({id: file.getId(), date: file.getDateCreated()});
}
obj.sort(function(x, y) {return x.date < y.date ? 1 : -1});
obj.shift();
var fileIDs = obj.map(function(e) {return e.id});
return fileIDs;
};
function deleteFiles() {
var fileIDs = getOldFileIDs();
fileIDs.forEach(function(fileID) {
Drive.Files.remove(fileID);
});
};