RegExp GWT / Javascript的测试方法

时间:2011-05-13 03:23:27

标签: java javascript regex gwt

我想通过使用正则表达式来检测String是否为小数。我的问题更多的是关于如何使用正则表达式机制而不是检测String是小数。我使用RegExp提供的GWT类。

        String regexDecimal = "\\d+(?:\\.\\d+)?";
        RegExp regex = RegExp.compile(regexDecimal);
        String[] decimals = { "one", "+2", "-2", ".4", "-.4", ".5", "2.5" };
        for (int i = 0; i < decimals.length; i++) {
            System.out.println(decimals[i] + " "
                    + decimals[i].matches(regexDecimal) + " "
                    + regex.test(decimals[i]) + " "
                    + regex.exec(decimals[i]));
        }

输出:

one false false null
+2 false true 2
-2 false true 2
.4 false true 4
-.4 false true 4
.5 false true 5
2.5 true true 2.5

我原以为String.matches()RegExp.test()两种方法都会返回相同的结果。

  1. 那之间有什么区别 两种方法?
  2. 如何使用RegExp.test()获得相同的行为?

2 个答案:

答案 0 :(得分:1)

尝试将正则表达式更改为

"^\\d+(?:\\.\\d+)?$"

解释 双重逃避是因为我们在爪哇... 正则表达式从^开始强制正则表达式从字符串的最开头匹配。 正则表达式以$结尾,强制正则表达式从字符串的最末端开始匹配。

这是你应该如何让String.matches()与GWT RegExp.test()做同样的事情

答案 1 :(得分:1)

我不知道区别,但我会说RegExp.test()是正确的,因为一旦你的字符串中有一个数字,你的正则表达式匹配,String.matches()就像那里的锚点一样正则表达式。

\\d+(?:\\.\\d+)?

您的非捕获组是可选的,因此无论周围是什么,一个\\d[0-9])都足以匹配。

当您向正则表达式添加锚点时,这意味着它必须匹配从开头到结尾的字符串,然后RegExp.test()可能会显示相同的结果。

^\\d+(?:\\.\\d+)?$