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

2023-12-01

我有一个 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(使用前将#替换为@)

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

随机推荐