查找并替换内容分组的脚本(Google-apps)

问题描述 投票:0回答:1

你们中的一些人可能熟悉Google Analytics中的内容分组,它基本上允许您将用户指定的组中的任意数量的URL分组(这对于分析所有同时存在的页面非常有用)。我正在制作一个脚本,将其提升到一个新的水平,并在Google表格中使用它。

目标:拥有一个重写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);
 }

这个脚本的工作原理在于它将带有'Example'的URL重写为'Test',并将'Another-example'重写为TEST-Nr2。

但是,最终脚本可能会有数千个需要重写的URL。此外,一些URL中包含大写,我想忽略它们并重写。

以上所有问题都让我有两个问题:

  1. 我怎样才能以这样的方式编写脚本(例如使用正则表达式?),我将不会拥有Toplex的Googleplex数和replace_with的?
  2. 如何使我的to_replace变量不区分大小写?

如果需要更多关于此事的信息,我很乐意提供。

亲切的问候,

JNeu

google-apps-script replace find case-insensitive find-replace
1个回答
0
投票

不知怎的,你知道模式和替换值,是吗?您需要将这些知识传授给您的脚本。

最简单的方法是从电子表格中读取它,例如在某些工作簿中的某个工作表上,您有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);
  });
}

补充阅读:

© www.soinside.com 2019 - 2024. All rights reserved.