【问题标题】:Strange exception with Java8 Nashorn regex engineJava8 Nashorn 正则表达式引擎的奇怪异常
【发布时间】:2015-02-24 18:13:35
【问题描述】:

我在使用 Nashorn Javascript 引擎解析文本时遇到了一个奇怪的 java.lang.ArrayIndexOutOfBoundsException: 64 错误。在 JJS 中重现问题:

var col0 = " xxxx,         xxx xxxxxx xxxxxxxxx xxxxxxx, xxxx xxxxx xxxxx ";
var name = /([^\s]+),(.*)+/.exec(col0);

例如,测试字符串的一些其他变体也会导致相同的异常。

var col0 = "x,         xxxxxxxxxx xxxxxxxxx xxxxxxx, xxxx xxxxx xxxxx ";

发生在 JDK8 版本 25、31 和 40ea(在 Windows 8 上)。

【问题讨论】:

  • 您是否有堆栈跟踪,如果有,您可以将其编辑到您的问题中吗?
  • (.*)+ 反正是个很奇怪的表达方式……
  • 是的,正则表达式确实很“有趣”(编辑结果),这可能是 JDK 测试没有发现它的原因。将正则表达式更改为更明智也可以“修复”错误,所以我很好。

标签: regex java-8 nashorn


【解决方案1】:

这是我们的正则表达式实现中的一个错误。我已经为它提交了一个错误:

https://bugs.openjdk.java.net/browse/JDK-8073818

更新:您可以使用-Dnashorn.regexp.impl=jdk 选项作为解决方法。这使得 Nashorn 使用 java.util.regex 包而不是没有显示此错误的 Joni。

【讨论】:

  • nashorn 拥有自己的正则表达式引擎是否有原因,或者换句话说,将 nashorn 切换为使用 java.util.regex 包有什么影响?
  • JavaScript 正则表达式与 Java 正则表达式不完全兼容(例如 Unicode 支持相当差)。坦率地说,无论如何我宁愿在内部脚本中使用 JDK 正则表达式作为默认值。
  • 这真的有效吗?我正在使用 Java/Nashorn 9,但是一个带有 Unicode 类别的测试正则表达式没有正确匹配,即使我验证它确实适用于 Pattern+Matcher...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-26
  • 1970-01-01
  • 2018-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多