从JavaScript字符串

时间:2017-05-16 10:42:53

标签: javascript php regex interpreter

所以,我有一个很大的.js文件,我希望用它来定义其中定义的所有变量。我想用PHP做这个(如果它是JS,那很容易)。

所以,例如,我有这个代码:

var var1="var value";
var var2={
    something:'value'
};
window.var3 = 80+100
;var4='another var value';

我应该得到一个这样的列表:

  1. 变量" var1"值:" var value"
  2. 变量" var2"价值:{something:' value'}
  3. 变量" var3"价值:80 + 100
  4. 变量" var4"有价值:'另一个变量值'
  5. 我试图使用正则表达式进行此操作,但我无法找到一个可以保证捕获所有内容的正则表达式。

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

    1. 行可以在没有;
    2. 的情况下终止
    3. 实际值可以包含;
    4. 可能没有值(例如var variable1;
    5. 这是我制作的正则表达式:

      /(?:var[\s]+|window\.){0,1}([^;\s]*)(?:\s*)=(?:\s*)([^;]*)(?:\s*);{0,1}/i
      

      有没有人有不同的方法?还是一个更好的正则表达式?

      我还在考虑使用解释JS的PHP库:J4P5V8js

      由于

1 个答案:

答案 0 :(得分:1)

要确保捕获所有变量内容,您肯定需要使用JS解析器,运行代码然后从解析器输出完整的变量上下文。最后你还可以得到这样的东西:

var whatever = (function() { return 4; })();

这是完全有效的javascript,可能会发生,而且通常比返回更复杂。

如果这是用户提供的代码,则运行代码确实存在一些安全问题,因为有人可以轻松地将外部资源调用到代码中。所以这里需要特别小心。