MvG*_*MvG 7 javascript java regex ant rhino
我正在尝试将此答案适用于regexp替换的情况:
<scriptdef name="propertyregex" language="javascript">
<attribute name="property"/>
<attribute name="input"/>
<attribute name="regexp"/>
<attribute name="replace"/>
<![CDATA[
var input = attributes.get("input");
var regex = new RegExp(attributes.get("regexp"));
var replace = attributes.get("replace");
var res = input.replace(regex, replace);
project.setProperty(attributes.get("property"), res);
]]>
</scriptdef>
Run Code Online (Sandbox Code Playgroud)
但是,执行该代码我总是得到一个例外:
javax.script.ScriptException: sun.org.mozilla.javascript.internal.EvaluatorException:
The choice of Java constructor replace matching JavaScript argument types
(function,java.lang.String) is ambiguous; candidate constructors are:
class java.lang.String replace(java.lang.CharSequence,java.lang.CharSequence)
class java.lang.String replace(char,char)
Run Code Online (Sandbox Code Playgroud)
我怎样才能在这里做正则表达式替换?
问题似乎是这个变量input属于Java类型java.lang.String,显然不是Rhino的本机String类型.您可以通过明确构建JavaScript字符串来避免此问题:
var input = new String(attributes.get("input"));
Run Code Online (Sandbox Code Playgroud)
小智 5
我在Alfresco论坛上找到了另一个答案。
问题是,当解释JS代码时,input不能确定类型。可以是java.lang.StringJavascript的string。论坛的建议对我有用-只是将input对象“投射” 到JS,string如下所示:
var res = (input + "").replace(regex, replace);
Run Code Online (Sandbox Code Playgroud)
注意:我刚刚将输入与空字符串连接在一起。
希望这可以帮助。
| 归档时间: |
|
| 查看次数: |
6206 次 |
| 最近记录: |