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

标签 php javascript regex

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

相关文章:

c# - 在 asp 和 c#/javascript 中创建帮助按钮

javascript - 在构造函数中定义原型(prototype)方法

php - 如何在linux服务器上设置cron?

php - jQuery ajax JSON 自定义错误处理

javascript - 他们有任何 JavaScript 注释库吗?

java - 如何验证java中的字符串是否匹配所需的模式?

c# - .NET Regex - 一次替换多个字符而不覆盖?

javascript - 通过php在用户端显示服务器错误

php - 将 LAMP 堆栈安装到虚拟环境中

regex - Apache Spark以正则表达式读取文件