【问题标题】:preg_match_all get all script tab excluding tabmanager scriptpreg_match_all 获取所有脚本选项卡,不包括 tabmanager 脚本
【发布时间】:2019-09-05 03:46:03
【问题描述】:

我想获取加载到我的屏幕中的所有脚本

    <script  type="text/javascript"  src="http://url/pub/static/frontend/Magento/luma/en_US/requirejs/require.js"></script>
    <script  type="text/javascript"  src="http://url/pub/static/frontend/Magento/luma/en_US/mage/requirejs/mixins.js"></script>
    <script  type="text/javascript"  src="http://url/pub/static/frontend/Magento/luma/en_US/requirejs-config.js"></script>
    <script  type="text/javascript"  src="http://url/pub/static/frontend/Magento/luma/en_US/mage/polyfill.js"></script>


<script type="text/x-magento-init">
{"*":{}}
<script>
<script>
    var BASE_URL = 'http://urlm/index.php/';
    var require = {
        "baseUrl": "http://url/pub/static/frontend/Magento/luma/en_US"
    };
</script>

    <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
    new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
    j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
    'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
    })(window,document,'script','dataLayer','GTM-KK5JZ25');</script>

我使用的代码是

$conditionalJsPattern = '@(?:<script type="text/javascript"|<script)(.*)</script>@msU';

我想排除 googletabmanger 代码
googletabmanger 代码包含一些词,如 googletagmanager , gtm

我该怎么做???

提前致谢

【问题讨论】:

标签: javascript php regex


【解决方案1】:

也许,这个表达可能接近你的想法:

(<script\b[^>]*>)(?!.*googletagmanager\.com)*?<\/script>

您可以随意标记它。


如果您想探索/简化/修改表达式,它已经 在右上角的面板上进行了解释 regex101.com。如果你愿意,你 也可以在this link看,怎么搭配 针对一些样本输入。


测试

$re = '/(<script\b[^>]*>)(?!.*googletagmanager\.com)*?<\/script>/s';
$str = '<script  type="text/javascript"  src="http://url/pub/static/frontend/Magento/luma/en_US/requirejs/require.js"></script>
<script  type="text/javascript"  src="http://url/pub/static/frontend/Magento/luma/en_US/mage/requirejs/mixins.js"></script>
<script  type="text/javascript"  src="http://url/pub/static/frontend/Magento/luma/en_US/requirejs-config.js"></script>
<script  type="text/javascript"  src="http://url/pub/static/frontend/Magento/luma/en_US/mage/polyfill.js"></script>

<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({\'gtm.start\':
new Date().getTime(),event:\'gtm.js\'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!=\'dataLayer\'?\'&l=\'+l:\'\';j.async=true;j.src=
\'https://www.googletagmanager.com/gtm.js?id=\'+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,\'script\',\'dataLayer\',\'GTM-KK5JZ25\');</script>';

preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);

var_dump($matches);

【讨论】:

  • 我没有得到你,我更新了我的代码你能告诉我我必须使用什么正则表达式来排除 google tab magener js
  • 它给出错误警告:preg_match_all(): Unknown modifier 'g' i use like $conditionalJsPattern = '/(
  • 只有部分js是select其他的不是
  • 脚本类似于
【解决方案2】:

首先,使用应该使用适当的工具来解析HTML(一般是XML),正则表达式是非常糟糕的主意。

但如果你必须使用正则表达式,我会建议这样的模式:(?s)&lt;script.+?&lt;\/script&gt;

解释:

(?s) - 单行模式:. 匹配换行符

&lt;script - 匹配 &lt;script 字面意思

.+? - 匹配一个或多个任意字符(包括换行符),非贪婪(尽可能少)

&lt;\/script&gt; - 匹配 &lt;/script&gt; 字面意思

Demo

【讨论】:

  • 感谢您的回答,但不排除 googletagmanager 代码
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 2016-05-15
  • 1970-01-01
  • 2018-03-10
  • 1970-01-01
  • 2017-03-02
  • 1970-01-01
相关资源
最近更新 更多