Найти и заменить скрипт (Google-приложения) для группировки контента

Некоторые из вас могут быть знакомы с группировкой контента в Google Analytics, которая в основном позволяет группировать любое количество URL-адресов в указанные пользователем группы (это полезно для одновременного анализа страниц, которые принадлежат друг другу). Я работаю над сценарием, чтобы перейти на следующий уровень и использовать его в Google Sheets.

Цель: создать работающий скрипт, который переписывает URL-адреса и дает им другое имя, независимо от того, использует ли он верхний или нижний регистры в URL-адресе.

Пока у меня есть это:

function onOpen() {
    var sheet = SpreadsheetApp.getActiveSheet();
    var range = sheet.getRange("a1:a10000");
    var to_replace = /.*example.*/;
    var replace_with = "TEST";
    var to_replace2 = /.*another-example.*/;
    var replace_with2 = "TEST-Nr2";

    replaceInSheet(sheet,range, to_replace, replace_with);
    replaceInSheet(sheet,range, to_replace2, replace_with2);
 }

Этот скрипт работает в том смысле, что он переписывает URL с "Примером" в "Тест" и переписывает "Другой пример" в TEST-Nr2.

Тем не менее, окончательный сценарий, вероятно, будет иметь тысячи URL-адресов, которые необходимо будет переписать. Кроме того, некоторые URL содержат заглавные буквы, которые я хочу игнорировать и просто переписать.

Все вышеперечисленное приводит меня к двум вопросам:

  1. Как я могу написать скрипт таким образом (например, с регулярными выражениями?), Чтобы у меня не было числа в Googleplex для To_replace и replace_with?

  2. Как я могу сделать мои переменные to_replace регистрозависимыми?

Если потребуется дополнительная информация по этому вопросу, я с удовольствием предоставлю это.

С уважением,

JNeu

1 ответ

Каким-то образом вы знаете шаблоны и значения замены, да? Вы должны передать эти знания вашему сценарию.

Самый простой способ - это прочитать его из электронной таблицы, например, на каком-то листе в какой-либо книге, у вас есть 1 столбец с шаблоном и еще один столбец с заменой. Тогда вы просто читаете эти данные в (Range#getValues()), а затем выполните итерацию этого массива для обработки диапазона данных. Обратите внимание, что шаблон, который вы храните на листе, не должен включать косые черты конструктора, т. Е. \d{1,3} и не /\d{1,3}/ в клетке.

Пример:

function processAll() {
  const source = SpreadsheetApp.openById("id of the spreadsheet with pattern - replacement data"),
        info = source.getSheetByName("some sheet name")
                 .getDataRange().getValues();

  const databook = SpreadsheetApp.getActive(),
        sheet = databook.getSheetByName("name of the sheet with data to process");
  if (!sheet) return; // sheet with that name doesn't exist.
  const range = sheet.getRange(1, 1, sheet.getLastRow(), 1);

  info.forEach(function (row) {
    // Create case-insensitive pattern from the string in Column A, e.g. \d{1,3} and NOT /\d{1,3}/
    var pattern = new RegExp(row[0], "i"); 
    var repl = row[1];  // replacement text from Column B
    replaceInSheet(sheet, range, pattern, repl);
  });
}

Дополнительное чтение:

  • RegExp
  • Array#forEach
Другие вопросы по тегам