Найти и заменить скрипт (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 содержат заглавные буквы, которые я хочу игнорировать и просто переписать.
Все вышеперечисленное приводит меня к двум вопросам:
Как я могу написать скрипт таким образом (например, с регулярными выражениями?), Чтобы у меня не было числа в Googleplex для To_replace и replace_with?
Как я могу сделать мои переменные 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