将Google Analytics UTM跟踪添加到Google表格中的单元格

时间:2018-06-05 18:54:32

标签: javascript regex google-analytics google-sheets

我正在尝试复制Google表格中的Google Analytics UTM builder。我有一个我在别处使用的公式,只有不到50%的用例,但需要一些额外的正则表达式添加到它。

=ARRAYFORMULA(IF(ISBLANK(A2:A),"",CONCAT(REGEXREPLACE(A2:A, "(/[^/]+)(?:/(?:\?|ref=)[^/]*)?$", "$1/"),"&utm_source=cpc&utm_medium=mysite")))

这是一个Google Sheet,显示D列中的示例和结果。带有正则表达式的公式部分用于提供的数据。可以使用File>制作副本。复制。

明确了Google Dev Tools页面上使用的JS文件,似乎有一个我认为Google正用于执行字符串构建器的正则表达式功能,但其格式与Google在Google中的使用方式不同片材。

f = function(e) {
            var t = e.replace(".", "\\.");
            return h("^(?:https?://)?(:?" + t + ")(?:$|[/?#])")
        },

如果您查看Google表格中的第5行到第8行,可能只需要对现有公式进行调整,以应对将字符串添加到具有文件扩展名的单元格,如果已经存在UTM字符串则不执行任何操作本。

编辑包含正则表达式的现有公式添加字符串"& utm_source = cpc& utm_medium = mysite"到细胞的末端 下面的列表显示了ORIGINAL网址,之后是必需的结果

https://www.aol.com

https://www.aol.com/?utm_source=cpc&utm_medium=mysite

(没有文件扩展名的标准网址,因此添加了/并附加了UTM字符串。状态:工作)

https://aol.com

https://aol.com/?utm_source=cpc&utm_medium=mysite

(没有www或文件扩展名的标准网址,因此添加了/并附加了UTM字符串。状态:工作)

https://www.aol.com/

https://www.aol.com/?utm_source=cpc&utm_medium=mysite

(标准网址没有文件扩展名,但结尾/存在,因此未添加,并且附加了UTM字符串。状态:工作)

https://www.aol.com/index.html

https://www.aol.com/index.html?utm_source=cpc&utm_medium=mysite

(存在文件扩展名,因此通过在末尾添加一个/以及附加的UTM字符串,它会中断.STATUS:FAILING。它不需要/ on文件扩展名)

https://www.aol.com/index.php

https://www.aol.com/index.php?utm_source=cpc&utm_medium=mysite

(存在另一种类型的文件扩展名(其中将有数百个),因此通过在末尾添加/以及附加的UTM字符串,它会中断.STATUS:FAILING。它不需要/ on文件扩展名)

http://www.asos.com/puma/puma-suede-classic-black-trainers/prd/3272954

http://www.asos.com/puma/puma-suede-classic-black-trainers/prd/3272954?utm_source=cpc&utm_medium=mysite

(此字符串使用产品ID,因此通过在末尾添加一个/以及附加的UTM字符串,它会中断.STATUS:FAILING。它不需要/ on产品ID)

http://www.asos.com/puma/puma-suede-classic-black-trainers/prd/3272954?utm_source=cpc&utm_medium=asos

http://www.asos.com/puma/puma-suede-classic-black-trainers/prd/3272954?utm_source=cpc&utm_medium=asos

(UTM字符串已经存在,所以它再次被添加。状态:FAILING。如果存在UTM,我们需要忽略它并保持单元格不变)

1 个答案:

答案 0 :(得分:1)

我们走了:

^((?:^https?:\/\/[^\/\n]+))(\/?$|\/)((?:(?!\?utm_source=cpc).)*)$

替换为:$1/$3?utm_source=cpc&utm_medium=mysite

这里的主要想法是

  • 捕获所有内容,直到第一个目录分隔符(或早期结束)作为域部分
  • 将第一个/投放到完整匹配中并重建它以获得规范化的网址
  • 使用排除utm_source=cpc
  • tempered greedy token捕获其余内容

Demo

但是,由于Google表格不支持外观,因此无效。仅使用基本的re2语法来制作它很难。无论如何,我找到了解决方案。这很丑陋,应该进行改进,但表明可以做到:

=ARRAYFORMULA(IF(ISBLANK(A2:A),"",CONCAT(REGEXREPLACE(A2:A, "^((?:^https?:\/\/[^\/\n]+))(?:\/?$|\/)(.*?)(?:\?.*)?$", "$1/$2"),IF(REGEXREPLACE(A2:A, "^.*?(\?.*)?$", "$1")="", "&utm_source=cpc&utm_medium=mysite", REGEXREPLACE(A2:A, "^.*?(\?.*)?$", "$1")))))

这里的基本想法是:

  • 重建规范化的URL(前两个步骤相同),直到显示?查询参数。如果没有,则添加固定文本,否则,保持原样。

Demo2

除此之外,Google表格无法胜任。帮自己一个忙,用另一种工具或不同的方法处理它。