Nashorn和Rhino:使用空白regexp拆分字符串

Nashorn and Rhino: Splitting strings by whitespace regexp

本文关键字:空白 regexp 拆分 字符串 Rhino Nashorn      更新时间:2023-09-26

我正在Java脚本引擎执行的JavaScript中解析Unix shell命令输出。我经常需要用可变数量的空白来分割字符串,并决定使用正则表达式来实现这一点。

到目前为止,在Rhino(Java7及以前版本)中,我可以使用以下内容按空格分割字符串:

line.split("''s+")

这在Nashorn(Java8及更高版本)中不再有效,字符串根本没有被拆分。我必须为Nashorn使用以下内容:

line.split(new RegExp("''s+"))

现在-当然你可能会说-这在Rhino中不起作用。然而,我需要在未来至少一年内保持与Java7的兼容性,因此我需要一个同时使用这两个脚本引擎的解决方案。

我尝试了一个相当丑陋的变通方法:

new java.lang.String(line).split("''s+")

令人惊讶的是,在纳绍恩没有运气。显然,它以某种方式强制为字符串创建NativeString对应项。

是否有一个nice解决方案可以通过可变数量的空白进行拆分,该解决方案可以同时使用两个脚本引擎?或者你必须走"肮脏"的路——即从脚本中确定脚本引擎(如果可能的话)?

使用正则表达式文字怎么样?

line.split(/''s+/)

在每个JS引擎中都应该以相同的方式工作。