gpt4 book ai didi

java - 使用 Nashorn 匹配 Javascript RegEx

转载 作者:行者123 更新时间:2023-11-29 03:04:59 26 4
gpt4 key购买 nike

如何使用符合 ECMA 262 的正则表达式评估输入?
阅读之后,我发现 Java 8 的 javascript 引擎 nashorn 可以帮助我做到这一点。
如何使用 nashorn 脚本引擎来匹配正则表达式?

最佳答案

假设您有一个文件 regex.js,其中包含用于确定给定字符串是否与给定正则表达式匹配的方法:

var check = function(regex, str) {
return new RegExp(regex).test(str);
};

您可以使用 Nashorn 脚本引擎评估此函数,并使用以下代码调用它:

ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
engine.eval(new FileReader("regex.js"));
Invocable invocable = (Invocable) engine;
Object result = invocable.invokeFunction("check", "\\d+", "1");
System.out.println(result);

为了调用函数,您首先必须将脚本引擎转换为 Invocable .该接口(interface)由 NashornScriptEngine 实现并定义了一个方法 invokeFunction为给定名称调用 JavaScript 函数。然后将其余方法参数直接作为参数传递给 JavaScript 方法。

请注意,也可以在没有外部 JavaScript 文件的情况下执行此操作。也可以通过要求脚本引擎评估字符串来避免转换为 Invocable。这是具有这两个想法的相同代码:

ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
engine.eval("function check(regex, str) { return new RegExp(regex).test(str); }");
Object result = engine.eval("check('\\\\d+', 1);");
System.out.println(result);

将变量从 Java 传递到 JavaScript 时,您必须非常小心字符的正确转义:两种语言的规则不同。

关于java - 使用 Nashorn 匹配 Javascript RegEx,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32571402/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com