从JavaScript字符串获取/捕获所有变量名称和值

从JavaScript字符串获取/捕获所有变量名称和值,javascript,php,regex,interpreter,Javascript,Php,Regex,Interpreter,因此,我有一个大的.js文件,我想得到其中定义的所有变量,以及值。我想从PHP做这件事,如果是JS,那就很容易了 例如,我有以下代码: var var1="var value"; var var2={ something:'value' }; window.var3 = 80+100 ;var4='another var value'; 我应该得到这样一个列表: var whatever = (function() { return 4; })(); 变量var1和值:var val

因此,我有一个大的.js文件,我想得到其中定义的所有变量,以及值。我想从PHP做这件事,如果是JS,那就很容易了

例如,我有以下代码:

var var1="var value";
var var2={
    something:'value'
};
window.var3 = 80+100
;var4='another var value';
我应该得到这样一个列表:

var whatever = (function() { return 4; })();
变量var1和值:var value 变量var2的值:{something:'value'} 变量var3的值为:80+100 变量var4的值为:“另一个var值” 我试图用正则表达式来实现这一点,但我找不到一个能保证捕获所有内容的正则表达式

以下是我遇到的一些问题:

线路可以终止,而无需安装; 实际值可以包含; 可能没有一个值,例如var variable1; 这是我制作的正则表达式:

/(?:var[\s]+|window\.){0,1}([^;\s]*)(?:\s*)=(?:\s*)([^;]*)(?:\s*);{0,1}/i
有人有不同的方法吗?还是一个更好的正则表达式

我还考虑使用一个解释JS:or的PHP库


感谢

为了确保捕获所有变量内容,您必须使用JS解析器,运行代码,然后从解析器输出完整的变量上下文。最后,你也可以有这样的东西:

var whatever = (function() { return 4; })();
这是完全有效的javascript,可能发生,通常比返回更复杂


但是,如果这是用户提供的代码,那么运行代码确实会有一些安全问题,例如,有人可以轻松地在代码中包含对外部资源的调用。因此,这里需要格外小心。

使用正则表达式从js脚本中提取变量及其值几乎是不可能的,有太多的陷阱:注释、字符串、文字正则表达式这是最难处理的,嵌套的括号。如果没有解析器,你无法做到这一点。我决定使用临时正则表达式解决方案。它已经不能100%工作,但足以满足我的需要。将来必须切换到解析器