Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何正确隔离&;存储Google文件ID';来自包含多个URL的字符串';s_Javascript_Arrays_Regex_Google Apps Script - Fatal编程技术网

Javascript 如何正确隔离&;存储Google文件ID';来自包含多个URL的字符串';s

Javascript 如何正确隔离&;存储Google文件ID';来自包含多个URL的字符串';s,javascript,arrays,regex,google-apps-script,Javascript,Arrays,Regex,Google Apps Script,我需要存储URL字符串中的所有文件ID。当Google Forms用户在表单响应中上载多个文件时,指向所有这些文件的Google Drive URL将以如下格式显示在表单中的单个单元格中: , , (这些是URL的供参考的内容) 我的目标是读取此单元格并将ID存储在数组中,例如:[1zeUiH8oO\uy2lnvcvv1zenr7b3enqp8aeh,1qmkl9klrtppko52oweuuuuu7qmgybmcuxs3,1FqH5NOpWyvcQ-XZWwcBImUJ5UBy98UHC]

我需要存储URL字符串中的所有文件ID。当Google Forms用户在表单响应中上载多个文件时,指向所有这些文件的Google Drive URL将以如下格式显示在表单中的单个单元格中:


,

(这些是URL的供参考的内容)

我的目标是读取此单元格并将ID存储在数组中,例如:
[1zeUiH8oO\uy2lnvcvv1zenr7b3enqp8aeh,1qmkl9klrtppko52oweuuuuu7qmgybmcuxs3,1FqH5NOpWyvcQ-XZWwcBImUJ5UBy98UHC]

我找到了一个提供正则表达式以在单个URL中隔离ID字符串的方法,因此我尝试对其进行调整以使用多个URL。不幸的是,我不太确定我在做什么,因为我对JavaScript,尤其是JavaScript正则表达式有着丰富的经验,所以不要判断我是否在代码上犯了愚蠢的错误:)

谢谢大家的帮助。 这是我的密码:

function getIdFromUrls(urls) {
  var idArray = [];
  var parts = urls.split(/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/);
  if (urls.indexOf('?id=') >= 0){
     idArray = (parts[6].split("=")[1]).replace("&usp","");
     return idArray;
   } else {
   idArray = parts[5].split("/");
   //Using sort to get the id as it is the longest element. 
   var sortArr = idArray.sort(function(a,b){return b.length - a.length});
   idArray = sortArr[0];
   Logger.log(idArray);
   return idArray;
   }
 }
这是日志:

[19-06-24 07:46:20:532美国东部夏令时],

预期结果:

[19-06-24 07:46:20:532 EDT][1zeUiH8oO_Y2lnvcv1zen7benqp8aeh,1qmkl9klrtppko52oweu7qmgybmcuxs3,1FqH5NOpWyvcQ-XZWwcBImUJ5UBy98UHC]


我将映射整个数组,并使用url ID创建一个新数组。 我发现getParameterByName函数有问题

function getParameterByName(name, url) {
    if (!url) console.error('url is not defined');
    name = name.replace(/[\[\]]/g, '\\$&');
    var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'),
    results = regex.exec(url);
    if (!results) return null;
    if (!results[2]) return '';
    return decodeURIComponent(results[2].replace(/\+/g, ' '));
};

let idArray = []; //create empty array
const urlArray = [
    'https://drive.google.com/open?id=1zeUiH8oO_Y2lnvcV1ZeNr7b3eNQP8aEH',
    'https://drive.google.com/open?id=1qmKl9klRTPPKO52owEuU7qMgYbMCuxs3', 
    'https://drive.google.com/open?id=1FqH5NOpWyvcQ-XZWwcBImUJ5UBy98UHC'
];

//map through array and push the returned ids to the new Array, you could use any for-loop to do this
urlArray.map(url => {
    const id = getParameterByName('id', url);
    idArray.push(id);
});

谢谢我从来没有想到过这一点。我继续使用split()函数创建URLARY,使其适应我的代码,并将数组映射更改为for循环。效果很好。