从JavaScript字符串获取/捕获所有变量名称和值
因此,我有一个大的.js文件,我想得到其中定义的所有变量,以及值。我想从PHP做这件事,如果是JS,那就很容易了 例如,我有以下代码:从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
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%工作,但足以满足我的需要。将来必须切换到解析器