php - 正则表达式 - 需要在特定 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
解决方案
正则表达式对此会很棘手,因为您可能无法控制变量或 JS 格式。如果您可以使用像这样的库将 JS 变量转换为 PHP 变量,它会变得不那么脆弱。
推荐阅读
- reactjs - 反应构建 - 未找到:错误:无法解析“缓冲区”
- iis - 服务帐户无法从本地计算机存储中读取证书
- r - 如何在 R 中的多个列中为 grep 选择多个值?
- ios - 重定向链接依次打开应用和应用商店
- google-sheets - 添加更多条件时出现 Google 表格公式错误
- c - 使用迭代公式为 C 数组赋值
- python - 在 PyCharm 中为项目的所有脚本指定一个运行/调试配置
- javascript - Javascript函数数组自动执行
- sql - 在 Redshift 中使用 regex_match 的问题
- sql-server - 不了解 SQL Server 和 SSAS 的安全性如何工作