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

我有一个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"
  }
}

请享用!

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...