在 Google 分析段过滤中排除所有以“/screens”开头的页面,EXCEPT“/screens/company-setup-details”

Exclude all pages that begin with "/screens" EXCEPT "/screens/company-setup-details" in Google Analytics Segment filtering

我一直在研究与我的平行的几个问题,但似乎无法弄清楚这一点。如标题所示,我需要解决以下问题:

排除所有以“/screens”开头的页面,除了“/screens/company-setup-details”。

我已经尝试在 http://regexr.com 上构建它,但到目前为止没有成功。我觉得这很容易解决,但我很难弄清楚广泛排除和次要包含。

我想补充一点,其中的一些示例是:“/screens/home”、“/screens/login”和“/screens/embed-setup”。

^/(?!screens(?!/company-setup-details))

排除所有以 /screens 开头的路径,除非其后跟 /company-setup-details

解释:是双重否定逻辑。对于"pass"的第一个否定前瞻(即不匹配),那么它内部的否定前瞻也必须通过(不匹配)。

注意上面的表达式将匹配:

  • 除了以 /screens
  • 开头的路径之外的所有路径
  • /screens/company-setup-details
  • 开头的所有路径

如果您只想匹配忽略的路径,则使用:

^/(screens(?!/company-setup-details))

更新: GA 正则表达式自 2009 年起不再支持负前瞻,因此我上面的表达式将不起作用。不过,这里有一个丑陋的 hack 应该可以完成这项工作:

^/(?:(?:[^s]|$)|s(?:[^c]|$)|sc(?:[^r]|$)|scr(?:[^e]|$)|scre(?:[^e]|$)|scree(?:[^n]|$)|screen(?:[^s]|$)|screens/company-setup-details)

Regexr.

如果您不介意排除作为 screens 前导子字符串的路径(例如,如果整个路径是 /scr/scree),那么您可以简化正则表达式 a位:

^/(?:[^s]|s[^c]|sc[^r]|scr[^e]|scre[^e]|scree[^n]|screen[^s]|screens/company-setup-details)

Regexr.

FWIW 我使用这个 JavaScript 代码生成了否定部分:

var str = '';
var ret = '';
'screens'.split('').forEach(function(c) {
    ret += (ret ? '|' : '') + str + '(?:[^' + c + ']|$)';
    str += c;
});
'(?:' + ret + ')';