首页 > 解决方案 > 正则表达式 - 需要在特定 javascript 变量的站点源代码之间提取 json

问题描述

我正在使用 php 来获取 url 的源 html。一旦我有了那个来源,我想使用正则表达式来提取一个特定的 javascript 变量值。

例如:

<script>
    let varOne.dataLayer['products'] = [
        {"prdocutId":1,"productName":"foo"},
        {"productId":2,"proudctName":"bar"}
    ];
    // Here's a comment
    let vartwo.dataLayer['foo'] = 'bar';
</script>

我尝试了以下正则表达式:

varOne.dataLayer\['products'\]\s?=\s?([^;]*)

这有效,但只是因为没有“;” 在产品阵列的任何地方。即,如果productID 1 的productName 类似于“foo;but not bar”,那么正则表达式将不起作用。

有没有办法告诉正则表达式在“varOne.dataLayer['products'] = ”之后拉出 JSON 对象,以便我可以自信地获取数组的值?

这是我一直在玩的 regex101 小提琴:https ://regex101.com/r/EXgTW1/1

标签: phparraysjsonregex

解决方案


正则表达式对此会很棘手,因为您可能无法控制变量或 JS 格式。如果您可以使用像这样的库将 JS 变量转换为 PHP 变量,它会变得不那么脆弱。


推荐阅读