Как правильно изолировать и сохранить идентификаторы файлов Google от строки, содержащей несколько URL-адресов? - PullRequest
1 голос
/ 24 июня 2019

Мне нужно хранить все идентификаторы файлов из строки URL. Когда пользователь Google Forms загружает несколько файлов в ответе формы, URL-адреса Google Drive для всех этих файлов выводятся в одну ячейку на листе в формате, подобном:

https://drive.google.com/open?id=1zeUiH8oO_Y2lnvcV1ZeNr7b3eNQP8aEH,
https://drive.google.com/open?id=1qmKl9klRTPPKO52owEuU7qMgYbMCuxs3, https://drive.google.com/open?id=1FqH5NOpWyvcQ-XZWwcBImUJ5UBy98UHC

(Это составленные ссылки на URL)

Моя цель - прочитать эту ячейку и сохранить идентификаторы в массиве, как в следующем примере: [1zeUiH8oO_Y2lnvcV1ZeNr7b3eNQP8aEH, 1qmKl9klRTPPKO52owEuU7qMgYbMCuxs3, 1FqH5NOpWyvcQ-XZWwcBImUJ5UBy98UHC].

Я нашел поток , который предоставил регулярное выражение для изоляции строки идентификатора в одном URL-адресе, поэтому я попытался адаптировать его для использования нескольких 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 EDT] 1zeUiH8oO_Y2lnvcV1ZeNr7b3eNQP8aEH, https://drive.google.com/open?id

Ожидаемый результат:

[19-06-24 07: 46: 20: 532 EDT] [1zeUiH8oO_Y2lnvcV1ZeNr7b3eNQP8aEH, 1 кв. М.

1 Ответ

1 голос
/ 24 июня 2019

Я бы отобразил массив и создал новый массив с идентификаторами URL. Я нашел функцию 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);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...