我有一个 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");
正如您所看到的,每个数组行中至少有一个条目,最后一个条目是正在搜索的文件的名称。
不管怎样,问题是,正则表达式是否是最好的(如果是的话,一些建议的模式会很棒)。或者我是否应该用 split 来分割它,等等。
Cheers
你正在寻找这样的东西。注意我有 .js 文件作为本地文件,所以我使用file()
将其加载到数组中。对于您的实际脚本,您可能需要file_get_contents()
如果您的 php 无法在本地访问 .js 文件。
<?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"
}
}
Enjoy!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)