用Java解析JavaScript代码以检索变量'的名字
Parsing JavaScript code in Java to retrieve variables' names
我有一个包含javascript代码的Java String
,我需要提取所有javascript var
的名称。
那么,对于下面的javascript:
var x;
var a,b,c,d;
var y = "wow";
var z = y + 'x';
我需要得到"x,a,b,c,d,y,z"
作为结果。
我不需要得到它们的值,只需要得到它们的名字
你可以尝试获取脚本执行时创建的绑定:
ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine se = mgr.getEngineByName("JavaScript");
try {
se.eval("var x;var a,b,c,d;var y = '"wow'";var z = y+'x';");
Bindings bindings = se.getBindings(ScriptContext.ENGINE_SCOPE);
System.out.println(bindings.keySet());
}
catch (ScriptException e) {
//e.printStackTrace();
}
打印[d, b, c, println, a, context, z, y, print, x]
定义了一些额外的绑定:context, print and println
这里我们把它们过滤掉
Set<String> keySet = bindings.keySet();
keySet.removeAll(Arrays.asList("context", "print", "println"));
System.out.println(keySet);
打印[d, b, c, a, z, y, x]
类似如下:
List<String> vars = new ArrayList<String>();
Pattern p = Pattern.compile("^''s*var''s+(.*?)''s*;?$");
BifferedReader reader = .... // create the reader
String line = null;
while ((line = reader.readLine()) != null) {
Matcher m = p.matcher(line);
if (m.find()) {
vars.addAll(Arrays.asList(m.group(1).split("''s*,''s*")));
}
}
请注意,我在没有IDE的情况下编写了这段代码,并且从未编译和运行过它。所以,抱歉可能的错误,但我认为它是可读的,可以为您提供一个很好的起点。
我不确定这是否会太复杂,但我可能会得到Javascript的BNF(参见SO: BNF语法库?),然后使用类似ANTLR的东西创建Javascript解析器,然后可以使用它来提取基于Javascript源代码的所有变量。参见SO: ANTLR教程
相关文章:
- 为什么可以't我将检索到的文档分配给控制台中的变量
- Chrome扩展:Can't从chrome.local变量中检索值
- 无法在函数中检索全局变量的值
- 检索本身包含变量的 Jquery 变量名的值
- 使用 Javascript 或 jQuery 检索会话变量的简单快捷的方法
- 调用c#函数从传递javascript变量的javascript中检索数据
- 如何检索jquery ajax对php变量的响应
- 如何在JavaScript中检索变量的名称
- 如何从Mysql检索变量并在JS中的函数中使用它
- 检索在onchange javascript事件中创建的javascript变量
- jQuery,用于检索数据的变量
- AJAX来检索对象并将其存储在变量中
- 在 Success 函数中检索多个值并将它们存储到 javascript 变量中
- 尝试检索变量以检查表单是否有效
- Javascript 正则表达式从句子中检索变量
- 如何将使用 getter 检索到的 Ember 数据放入临时变量中进行处理
- 在 Express 中检索多个变量
- 从 JavaScript 传递后无法检索变量
- 在angular中,我如何将输入变量检索到javascript控制器上?
- 变量检索JSON