gpt4 book ai didi

php - 在 PHP 中解析 Javascript 文件以提取其中定义的数组的最佳方法

转载 作者:可可西里 更新时间:2023-11-01 00:51:43 25 4
gpt4 key购买 nike

我有一个 Javascript 文件,它是从旧版应用程序自动生成的,该应用程序中定义了一个巨大的数组(以及一些其他函数和内容)。这个 javascript 文件对内容执行搜索,但随着时间的推移,它已经增长到超过 2Mb,这听起来可能并不多,但每次你想使用这个特定的网络应用程序进行搜索时,你都必须下载这个文件。不用说表演是残酷的。我想要一种在 js 周围放置包装器的最小工作方式,这样它就不会在客户端调用 js,而是调用我的新 php 脚本来搜索内容。

每次生成的 JS 文件的布局都是一样的,所以我可以写一堆特定的 trim 和拆分,但后来我想 regexp 可能是要走的路,但老实说我不确定,所以我想我会问问你们这些可爱的人。

样本来源:

Page[0]=new Array("Some text1","More text1","Final Text1","abc.html");
Page[1]=new Array("Some text2","More text2","xyz.html");

如您所见,数组的每一行中至少有一个条目,最后一个条目是要搜索的文件的名称。

无论如何,问题是正则表达式是否最好(如果是这样,一些建议的模式会很棒)。或者我是否应该用 split 等来拆分它。

干杯

最佳答案

您正在寻找这样的东西。请注意,我将 .js 文件作为本地文件,因此我使用 file() 将其加载到数组中。对于您的实际脚本,如果您的 php 无法在本地访问 .js 文件,您可能需要 file_get_contents()

<?php
$lines = file('test.js');

$pages = array();

foreach($lines as $line) {
if(strpos($line, 'new Array') != false) {

preg_match('/Page\[\d\]\s?\=\s?new Array\((\"(.*)",?\s?\n?)+\);/', $line, $matches);


$values = preg_split('/,(?=(?:[^\"]*\"[^\"]*\")*(?![^\"]*\"))/', $matches[1]);

$currNo = count($pages);
$pages[$currNo] = array();

for($i = 0; $i < count($values); $i++) {
array_push($pages[$currNo], trim($values[$i], '"'));
}


}
}

var_dump($pages);

对于您的示例,结果如下:

array(2) {
[0]=>
array(4) {
[0]=>
string(10) "Some text1"
[1]=>
string(10) "More text1"
[2]=>
string(11) "Final Text1"
[3]=>
string(8) "abc.html"
}
[1]=>
array(3) {
[0]=>
string(10) "Some text2"
[1]=>
string(10) "More text2"
[2]=>
string(8) "xyz.html"
}
}

尽情享受吧!

关于php - 在 PHP 中解析 Javascript 文件以提取其中定义的数组的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5699398/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com