我正在尝试在 WordPress 网站中搜索代码,特别是针对 facebook 像素。我正在使用正则表达式搜索字符串,我知道字符串以什么开头、以什么结尾以及字符串不应该包含什么。我在 SO 上尝试了其他解决方案,但没有运气。
字符串应该以:
开头 <块引用>fbq('track'
结尾:
<块引用>);
且不包含:
<块引用>页面视图
我一直在尝试进行此搜索的表达式是:
^(?=^fbq('track')(?=.*\);$)(?=^(?:(?!PageView).)*$).*$/
来自另一个 StackOverflow 问题: Combine Regexp?
但是,我一直回复说这是一种无效的格式。
答案 0 :(得分:1)
您可以使用:
^(?!.*PageView)fbq\('track.*\);$
或者:
^fbq\('track(?!.*PageView).*\);$
Demo.
细分:
^
- 字符串的开头。(?!.*PageView)
- 否定前瞻(从现在开始不包含“PageView”)。fbq\('track
- 匹配 "fbq('track",字面意思(注意 "(" 是如何转义的:\(
)。.*
- 匹配零个或多个字符(任何字符)。\);
- 匹配 ");"从字面上看。$
- 字符串结束。答案 1 :(得分:0)
你可以选择第一个! 我已经在正则表达式软件中测试了它,当我需要时我用来尝试“正则表达式”。 ;)
我要添加一点点沙子:)
这里有一个很好的资源来阅读环视和后视(以及否定后视等):https://www.regular-expressions.info/lookaround.html< /p>
*它包含有关最常用的正则表达式风格的使用和限制的信息(以及它在某些编程语言中的实现)。
答案 2 :(得分:0)
首先,如果您无法找到 FB Pixel,请检查您的网站上是否有 Google Tag Manager,也许它是通过 GTM 添加的,
如果没有,那么使用 RegEx...
由于这是模板文件中的脚本,它可以跨越多行并在文本前有空格等,因此更灵活的模式是合适的。
所以主要思想是不要在模式中使用 ^ 和 $。
fbq\('track'(?!.*?PageView)[^)]*\);
上述模式满足您在 OP 中概述的要求,其中
fbq\('track'
- 字面上匹配 fbq('track' 作为字符串的开头(?!.*?PageView)
- 如果找到 PageView,则否定前瞻失败,.*?用于延迟匹配 0 个或多个字符,因为我们迟早会找到 PageView 并且不需要回溯fbq('track'
<- 光标在此处[^)]*
- 匹配 0 个或多个字符,直到找到将其排除在外的右括号\);
- 匹配 );从字面上看。我猜你可能在使用 VSCode、PhpStorm 或类似的,所以为了兼容性,我在示例中选择了 JS 作为风格。
如果您在 Linux 上使用 grep say 或 Windows 上的 bash 终端(由于 grep 参数兼容性不确定 Mac),从 Theme 目录运行它应该会显示文件和匹配项。
grep -Pzro 'fbq\('\''track'\''(?!.*?PageView)[^)]*\);'