gpt4 book ai didi

javascript - Java - 与使用 javax.script.ScriptEngine 的 1.7 相比,Javascript 正则表达式代码在 1.8 上失败;

转载 作者:行者123 更新时间:2023-11-30 15:23:36 25 4
gpt4 key购买 nike

我在 JavaScript 中有一个正则表达式模式,它在浏览器和使用 javax.script.ScriptEngine; 的 Java 1.7 环境中运行良好,但在 1.8 上失败。

我的代码:

ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine engine = mgr.getEngineByName("JavaScript");

String js = "var fileSrc = '<SPAN>06-24-2015 11:28AM 0250 01 90775 05342</SPAN>';"
+ "var trans_regex = /\\<span\\>(\\d{2}-\\d{2}-\\d{4})\\s*?(\\d{1,2}:\\d{2}\\s*?(?:am|pm))\\s*?(?:<\\/SPAN><BR\\/?><SPAN>)?\\s*?((\\d[ -]*?){13,17})\\s*?\\<\\/span\\>/i ;"
+ "print('executed regex result : ' + trans_regex.exec(fileSrc) ) ; "
+ "var t_time = trans_regex.exec(fileSrc)[2];"
+ "var t_cc = trans_regex.exec(fileSrc)[3];"
+ "print(\" time \" + t_time)";

Object result = engine.eval(js);

Java 1.7 环境下的结果是:

executed regex result : 06-24-2015 11:28AM 0250 01 90775 05342,06-24-2015,11:28AM,0250 01 90775 05342,2 time 11:28AM

1.8环境下的结果:

executed regex result : null Exception in thread "main" javax.script.ScriptException: TypeError: Cannot get property "2" of null in at line number 1

错误出现在我的 javascript 代码的这一行:-

"var t_time = trans_regex.exec(fileSrc)[2];"

编辑:

按照建议我逐组创建正则表达式,相关问题可以找到here

最佳答案

print 的输出显示了您的实际问题:

executed regex result : null

因此,正则表达式引擎认为您的模式与输入不匹配。

毫不奇怪,null[2] 不起作用。

关于这一点的两点:

  • 您调用了 trans_regex.exec(fileSrc) 三次。执行一次并将结果放入变量中。
  • 除非你能保证匹配,否则你应该检查空结果并以某种方式处理它。

我建议在您的 Java 中添加一个 println 来打印脚本并查看引用的确切结果。然后根据第一原则重新构建您的正则表达式,测试每次迭代。

例如我将正则表达式 chop 为空,然后将其重建为:

+ "var trans_regex = /<span>(\\d{2}-\\d{2}-\\d{4})\\s*?(\\d{1,2}:\\d{2}\\s*?(?:am|pm))\\s*?/i;\n"

... 它不再出错了。继续添加组,直到它再次失败。要么原因很清楚,要么你会有一个更有针对性的问题。

这是一个有点怪异的正则表达式,所以期望 SO 为您调试它是不合理的。

关于javascript - Java - 与使用 javax.script.ScriptEngine 的 1.7 相比,Javascript 正则表达式代码在 1.8 上失败;,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43322744/

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