正则表达式在PHP中提取JavaScript变量

时间:2012-07-07 21:16:22

标签: php javascript arrays web-scraping

我有一个包含大量内容的大型HTML文件。我想从整个文件中获取一个名为'a'的JavaScript变量。

示例:(删除了大量实际内容)

<html>
    <head>
        <script>
            var a = [{'a': 1, 'b': 2}];
        </script>
    </head>
    <body>
        ....
    </body>
</html>

以上应该是:

[{'a': 1, 'b': 2}]

1 个答案:

答案 0 :(得分:11)

preg_match('#var a = (.*?);\s*$#m', $html, $matches);
echo $matches[1];

说明:

  • 正则表达式会尝试匹配包含var a =
  • 的任何行
  • 然后它将匹配所有内容,直至;,任意数量的空格\s*,然后行$
  • m修饰符将尝试独立匹配每一行,如果没有它,$只匹配字符串的结尾,这将是有点无用的

任何数量的空格仅在定义后有一些空格的情况下,没有其他原因(例如人为错误)。如果您确定不会发生,则可以删除\s*

请注意,这并不能取代成熟的解析器。如果a定义在多行上,如果a定义了多次(考虑范围,您可以在全局范围内var a,则需要进行修改函数中的var a等等。