JavaScript str.split(/ [^ a-zA-Z0-9。@] |(username | fname)/不从字符串中删除“ username”或“ fname”

时间:2019-10-03 21:47:06

标签: javascript regex

我的程序中有一个简单的查询字符串:

?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中不起作用。

有什么想法吗?

2 个答案:

答案 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);
  });
};