【问题标题】:Regex for "starts with," "does not contain," and "ends with"“开始于”、“不包含”和“结束于”的正则表达式
【发布时间】:2021-08-05 16:57:17
【问题描述】:

我正在尝试在 WordPress 网站中搜索代码,特别是 facebook 像素。我正在使用正则表达式搜索字符串,并且我知道字符串的开头、结尾以及字符串不应包含的内容。我在 SO 上尝试过其他解决方案,但没有运气。

字符串应该以:

开头

fbq('追踪'

结尾:

);

并且不包含:

页面视图

我一直在尝试执行此搜索的表达式是:

^(?=^fbq('track')(?=.*\);$)(?=^(?:(?!PageView).)*$).*$/

来自另一个 StackOverflow 问题: Combine Regexp?

但是,我不断回复说这是无效的格式。

【问题讨论】:

  • 它必须是一个正则表达式还是你可以做一些类似的事情:match(/^fbq('track'.*);$/) && !match(/PageView/)

标签: regex wordpress multiple-conditions facebook-pixel


【解决方案1】:

你可以使用:

^(?!.*PageView)fbq\('track.*\);$

或者:

^fbq\('track(?!.*PageView).*\);$

Demo.

细分:

  • ^ - 字符串的开头。
  • (?!.*PageView) - 负前瞻(从现在开始不包含“PageView”)。
  • fbq\('track - 匹配 "fbq('track",字面意思(注意 "(" 是如何转义的:\()。
  • .* - 匹配零个或多个字符(任何字符)。
  • \); - 匹配 ");"字面意思。
  • $ - 字符串结束。

【讨论】:

    【解决方案2】:

    你可以选择第一个! 我已经在正则表达式软件中对其进行了测试,当我需要时,我用它来尝试“正则表达式”。 ;)

    我要加一点沙子:)

    在这里,您有一个很好的资源来阅读 look-aroundlook-behind(以及负面的look-behind 等):https://www.regular-expressions.info/lookaround.html

    *它包含有关最常用的正则表达式风格的使用和限制的信息(以及它在某些编程语言中的实现)。

    【讨论】:

      【解决方案3】:

      首先,如果您无法找到 FB Pixel,请检查您的网站上是否有 Google Tag Manager,也许它是通过 GTM 添加的,

      如果不是,那么继续使用 RegEx...

      由于这是模板文件中的脚本,它可以跨越多行并且在文本等之前有空格,因此更灵活的模式将是合适的。

      所以主要的想法是不要在你的模式中使用 ^ 和 $。

      Example

      fbq\('track'(?!.*?PageView)[^)]*\);
      

      上述模式满足您在 OP 中概述的要求,其中

      • fbq\('track' - 从字面上匹配 fbq('track' 作为字符串的开头
      • (?!.*?PageView) - 如果找到 PageView,负前瞻将失败,.*?用于惰性匹配 0 个或多个字符,因为我们会很快找到 PageView 并且不需要回溯
      • 由于上面的lookahead是0长度,如果它通过(PageView not found)光标仍然会在-fbq('track'的末尾
      • [^)]* - 匹配 0 个或多个字符,直到找到不包括它的右括号
      • \); - 匹配);字面意思。

      我猜你可能正在使用 VSCode、PhpStorm 或类似工具,因此我在示例中选择了 JS 作为风格以实现兼容性。

      如果您在 Linux 中使用 grep say 或在 Windows 上使用 bash 终端(由于 grep 参数兼容性,不确定 Mac),从主题目录运行它应该会显示文件和匹配项。

      grep -Pzro 'fbq\('\''track'\''(?!.*?PageView)[^)]*\);'
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-21
        • 1970-01-01
        • 2013-12-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多