【问题标题】:Get/capture all variableNames and values from JavaScript string从 JavaScript 字符串中获取/捕获所有变量名和值
【发布时间】:2017-05-16 10:42:53
【问题描述】:

所以,我有一个大的 .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”:'另一个 var 值'

我试图使用正则表达式来做到这一点,但我找不到保证捕获所有内容的正则表达式。

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

  1. 可以在没有 ; 的情况下终止行
  2. 实际值可以包含;
  3. 可能没有值(例如var variable1;

这是我制作的正则表达式:

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

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

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

谢谢

【问题讨论】:

  • 使用正则表达式从 js 脚本中提取变量及其值几乎是不可能的,陷阱太多:cmets、字符串、文字正则表达式 (这是最难处理的),嵌套括号。如果没有解析器,您将无法做到这一点。

标签: javascript php regex interpreter


【解决方案1】:

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

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

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

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

【讨论】:

  • 我决定使用临时的正则表达式解决方案。它已经不能 100% 工作,但足以满足我的需要。将来必须切换到解析器
猜你喜欢
  • 1970-01-01
  • 2022-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多