Java和JS中的RegEx表现不同?

时间:2013-08-02 11:54:33

标签: java javascript regex gwt

JavaScript RegEx匹配问题很严重: 在Java方面,RegEx拆分表达式的行为与JS方面不同。我把它剥离到下面的例子,也许你知道根本原因?

的TestString: test == 1

我希望== 1匹配(我将在后面使用它作为分割器,但对我的问题无关紧要。)

剥离的正则表达式: ([=\s]+).*?(?:[=]|\z)+

java方面的结果(http://gskinner.com/RegExr/)匹配:== 1

JS方面的结果(http://www.regular-expressions.info/javascriptexample.html)匹配:===

为什么?如何使正则表达式JS的行为与Java端相同?

1 个答案:

答案 0 :(得分:3)

JavaScript不支持\A字符串锚点的\Z结束和=结束,因此强制结束$上的匹配。请改为使用alert(m);行锚点结束。

编辑
那里也只有一场比赛。如果您查看code并向其添加alert(m); // ["== 1", "=="] var s = "Match at position " + m.index + ":\n"; for (i = 0; i < m.length; i++) { s = s + m[i] + "\n"; } alert(s);

m[0]

Matcher#group(0)为您提供实际匹配(就像Java中的m[1])和(?:[&=\\s]+)?第一个组捕获

编辑 :( Java和JavaScript的 String.split()方法之间存在差异

  • 与Java不同,JavaScript的 split()返回结果数组中分隔符正则表达式中指定的所有捕获组。因此,您需要将第一个正则表达式组无法捕获为{{1}}。

  • 使用Java的 split()方法,结果数组中不包含尾随空字符串。在您的JavaScript代码中,您必须自己忽略它们。但是,考虑到输入字符串的性质(布尔条件),您可以安全地删除最后一个元素,因为输入字符串总是以分隔符结束。