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


Regular expression extract a JavaScript variable in PHP

我有一个很大的HTML文件,其中包含很多内容。我想从整个文件中获得一个JavaScript变量,例如'a'

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

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

应该从上面得到的是:

[{'a': 1, 'b': 2}]
preg_match('#var a = (.*?);'s*$#m', $html, $matches);
echo $matches[1];

说明:

  • Regex将尝试匹配任何包含var a =的行
  • 然后,它将匹配所有内容,直到;、任意数量的空间's*,然后是行$的末尾
  • m修饰符将尝试独立地匹配每一行,如果没有它,$将只匹配字符串的末尾,这将有点无用

任何数量的空格只有在定义后有一些空格的情况下才会出现,而不是其他原因(例如人为错误)。如果您确信不会发生这种情况,可以删除's*

请注意,这并不能取代全面的解析器。如果a定义在多行上,如果a定义不止一次(想想作用域,你可以在全局作用域上有var a,然后在函数内有var a),等等,你需要进行修改。