我有一个Javascript文件,它是从遗留应用程序自动生成的,其中定义了一个巨大的数组(以及其他一些函数和东西).这个javascript文件对内容进行搜索,但随着时间的推移,它已经增长到超过2Mb,这可能听起来不多,但每次你想用这个特定的web应用程序进行搜索时你都必须下载它.毋庸置疑,表现非常恶劣.我想要一个简单的方法在js周围放置一个包装器,这样它就不会调用客户端的js,而是调用我的新PHP脚本来搜索内容.
生成的JS文件的布局在每次生成时都是相同的,所以我可以编写一堆特定的修剪和分割,但后来我认为regexp可能是要走的路,但说实话我不是当然,所以我想我会问你可爱的人.
样本来源:
Page[0]=new Array("Some text1","More text1","Final Text1","abc.html");
Page[1]=new Array("Some text2","More text2","xyz.html");
如您所见,每个数组行中至少有一个条目,最后一个条目是要搜索的文件的名称.
无论如何,问题是,regexp是否最好(如果是这样,一些建议的模式会很棒).或者如果我应该用拆分等分割它
干杯
解决方法:
你正在寻找这样的东西.注意我将.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"
}
}
请享用!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。