1
如何找到在Java中分析的javascript函數的名稱。 我允許用戶在鍵入一個JavaScript函數(在JTextArea),然後我用ScriptEngineManager以確認它是有效的語法如下:ScriptEngineManager可以給我它剛剛在Java中編譯的Javascript函數的名稱
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語句都會成功通過該測試。我很肯定答案是「不」。 – Pointy
嗯,是的確發生過後發佈,它只是檢查它是有效的JavaScript語法而不是Javscript函數,但肯定必須有一個強大的方法來做到這兩個(檢查它的javascripit函數,它的名字) –
JavaScript是足夠靈活以至於沒有辦法做到這一點,因爲沒有讓Rhino提供這種統計數據。 JavaScript函數甚至不必擁有*名稱。 – Pointy