使用 PHP 和 REGEX 解析 JS 脚本以获取 JS 变量值
Parse a JS script using PHP and REGEX to get a JS variable value
我需要从PHP打开一个JS文件,在这个文件中找到一个json var,并将其转换为php数组。
现在我无法弄清楚要使用哪个正则表达式。
// get the js file
$file = file_get_contents ("http://pve.proxmox.com/pve2-api-doc/apidoc.js");
// extract the json content of var pveapi
if ( preg_match ( "#pveapi = ({[^}]*})#", $file, $infoJson ) ) {
$arrJson = json_decode ( $infoJson [1], true );
}
// shows nothing so far :((
print_r($arrJson);
我找到的例子很少,但没有一个对我有用。任何在正则表达式方面具有良好技能的人都可以帮助我吗?
本
编辑:添加了JS文件的一部分:
var pveapi = [
{
"info" : {
"GET" : {
"parameters" : {
"additionalProperties" : 0
},
"permissions" : {
"user" : "all"
},
"returns" : {
"type" : "array",
"items" : {
"type" : "object",
"properties" : {}
},
"links" : [
{
"rel" : "child",
"href" : "{name}"
}
]
},
"name" : "index",
"method" : "GET",
"description" : "Cluster index."
}
}
}
];
Ext.onReady(function() { ... }
在这种情况下,可以通过匹配行尾的分号来找到结尾:
if (preg_match('/^var pveapi = (.*?);$/ms', $js, $matches)) {
$data = json_decode($matches[1]);
print_r($data);
}
默认情况下,正则表达式引擎在各个行上贪婪地运行,所以你必须告诉它做相反的事情——你似乎正在寻找的正则表达式将是
#'spveapi's*='s*(.*?);'s*$#s
它的作用是:
#
开始表达式's
确保变量名称前面有空格,这样它就不是其他变量名称的一部分pveapi
查找变量's*='s*
确保周围有一个等号和可选的空格(.*?);'s*$
在找到分号之前获取尽可能少的字符 - 即所有字符直到第一个分号,后面只有可选的空格和行尾#ms
结束表达式并告诉它让.
也匹配行尾,并将$
与每行的结尾匹配
相关文章:
- chrome扩展:尽管运行了at:documentidle,js脚本还是过早启动
- 如何在运行时在angular 2中加载外部js脚本
- 为什么我的控制器没有启动函数.js脚本
- 如何让JS脚本在导航后继续运行(谷歌chrome控制台)
- 如何使用Node.js脚本从Rally获取用户的修订历史
- 在Debian中运行包含load()和print()函数的JS脚本
- 更改路由后,运行一次js脚本
- Yii2从js脚本的页面上添加来自供应商文件夹的图像、css、js文件
- PHP和JS脚本的奇怪问题,在我刷新页面之前第一次失败
- js脚本未加载到jinja2模板中
- Disqus的计数.js脚本在索引中无法正常运行.html与react.js网站
- 按顺序异步加载JS脚本(等待上一个脚本完成)
- node.js脚本中出现Sqlite Sqlite_MISUSE错误
- ASP.NET MVC路由-动态加载.js脚本
- 在执行JS脚本后监视对DOM的更改
- 在 Node.Js 脚本中使用 Javascript 计时器在特定时间触发事件
- 合并 2 个 JS 脚本 - 老派
- 简单的拖放JS脚本不起作用
- 从外部 js 脚本创建元素并插入到 html 中
- 将参数传递到外部 JS 脚本的最佳方法