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

标签 javascript regex google-analytics google-sheets

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

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

这是一个Google Sheet在 D 列中显示示例和结果。其中包含正则表达式的公式部分地处理所提供的数据。可以使用"file">“制作副本”来制作副本。

取消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”添加到单元格末尾 下面的列表显示了原始网址,后面是所需的结果

https://www.aol.com

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

(没有文件扩展名的标准 URL,因此添加了/并附加了 UTM 字符串。状态:正在运行)

<小时/>

https://aol.com

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

(标准 URL 没有 www 或文件扩展名,因此添加了/并附加了 UTM 字符串。状态:正在运行)

<小时/>

https://www.aol.com/

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

(没有文件扩展名的标准 URL,但存在结尾/,因此不会添加此内容并附加 UTM 字符串。状态:正在运行)

<小时/>

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

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

(文件扩展名存在,因此通过在末尾添加/以及附加的 UTM 字符串,它会中断。状态:失败。文件扩展名不需要/)

<小时/>

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

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

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

<小时/>

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 字符串,它会中断。状态:失败。产品 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 字符串已存在,因此会再次添加。状态:失败。如果 UTM 存在,我们需要忽略它并保持单元格不变)

最佳答案

我们开始:

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

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

这里的主要想法是

  • 捕获第一个目录分隔符(或提前结束)之前的所有内容作为域部分
  • 将第一个 / 放入完整匹配中并重建它以获得规范化的 URL
  • 使用 tempered greedy token 捕获其余部分不包括 utm_source=cpc

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 表格无法胜任这项工作。帮自己一个忙,用其他工具或不同的方法来处理这个问题。

关于javascript - 将 Google Analytics UTM 跟踪添加到 Google 表格中的单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50707120/

相关文章:

python - 谷歌分析报告 API v4 : nextPagetoken cannot go beyond 10, 000 行(Python)

javascript - Babel Webpack 错误 : You may need an appropriate loader to handle this file type

javascript - 我无法连接到我的 websocket,因为它的握手 Sec-WebSocket-Accept header 值不正确

java - 为什么java对此正则表达式给出 "Unclosed Group"错误?

asp.net - 正则表达式检查字符串至少包含一个字母或数字

google-analytics - 一些好的Web分析工具

javascript - 如何将 Node.js 异步流回调转换为异步生成器?

javascript - 获取单击的列表项的 ID 返回未定义

regex - 匹配所有内容直到大写单词

javascript - Google Analytics 'not set' 值作为浏览器版本?