Javascript 如何正确隔离&;存储Google文件ID';来自包含多个URL的字符串';s
我需要存储URL字符串中的所有文件ID。当Google Forms用户在表单响应中上载多个文件时,指向所有这些文件的Google Drive URL将以如下格式显示在表单中的单个单元格中: ,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存储在数组中,例如:
[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循环。效果很好。