ScriptEngineManager能给我它刚刚用Java编译的Javascript函数的名称吗
Can ScriptEngineManager give me the name of the Javascript function it has just compiled in Java
如何找到用Java解析的javascript函数的名称。我允许用户输入Javascript函数(在JTextArea中),然后我使用ScriptEngineManager来确认它是有效的语法,如下所示:
public final boolean isFunctionValid(String function)
{
try
{
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("JavaScript");
Object result = engine.eval(function);
}
catch(ScriptException se)
{
return false;
}
return true;
}
工作正常,但我也想知道函数的名称,这样我就可以为函数指定一个与函数名称匹配的名称。我更喜欢ScriptEngineManager为我做这件事,而不是让我尝试通过解析变量函数来解决这个问题,同时考虑这种方法的所有固有风险
编辑由于似乎没有办法正确地做到这一点,我使用对我有效的正则表达式创建了两个检查
protected static Pattern functionNameMatch;
protected static Pattern multipleFunctionsMatch;
static
{
functionNameMatch = Pattern.compile("function[ ]+([a-zA-Z0-9]*)[ ]*''(");
multipleFunctionsMatch = Pattern.compile("function[ ]+");
}
protected boolean isOneFunction()
{
Matcher m = multipleFunctionsMatch.matcher(function.getText());
if(m.find())
{
if(m.find())
{
return false;
}
return true;
}
return false;
}
protected String deriveNameFromFunction()
{
Matcher m = functionNameMatch.matcher(function.getText());
if(m.find())
{
return m.group(1);
}
return "";
}
由于这在JavaScript中是不可能的,我使用模式匹配代替进行了一些额外的检查
protected static Pattern functionNameMatch;
protected static Pattern multipleFunctionsMatch;
static
{
//TODO this method only works if all parameters are put on first line of function, otherwise declares function
//is invalid
functionNameMatch = Pattern.compile("function[ ]+([a-zA-Z0-9]*[ ]*''(.*''))");
multipleFunctionsMatch = Pattern.compile("function[ ]+");
}
protected boolean isOneFunction()
{
Matcher m = multipleFunctionsMatch.matcher(function.getText());
if(m.find())
{
if(m.find())
{
return false;
}
return true;
}
return false;
}
protected String deriveNameFromFunction()
{
Matcher m = functionNameMatch.matcher(function.getText());
if(m.find())
{
return m.group(1);
}
return "";
}
相关文章:
- 从函数JavaScript返回不可变数组/对象
- 将对象传递给函数.JavaScript
- 如何定义const函数javascript(语法糖)
- 新的日期函数javascript
- TypeError:this.getAttribute不是一个函数-javascript
- 从函数javascript发送变量
- 扩展自容器函数Javascript
- 从内部函数javascript内部分配外部函数的对象
- 使用函数JavaScript中的函数
- 在这里使用回调函数(JavaScript)有什么好处吗
- 来自函数 Javascript 的 NaN 返回值 ||函数执行顺序
- 将“e”传递给一个新函数 - javascript
- 调用函数中的一个函数——Javascript
- 传递的变量不适用于我的函数-Javascript
- 如何将类方法设置为等于多个函数?-Javascript
- 显示php中的函数javascript
- 如何使用php代码创建函数Javascript弹出框
- 未调用的外部函数-javascript
- 如何在类中运行函数.Javascript
- 关闭mouseover上的一个函数——Javascript,jQuery