RegExp GWT/Javascript的测试方法

test method of RegExp GWT/Javascript

本文关键字:测试方法 Javascript GWT RegExp      更新时间:2023-09-26

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

        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()获得相同的行为?

尝试将正则表达式更改为

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

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

这就是你应该如何让 String.matches() 做与 GWT RegExp.test() 相同的操作

我不知道

区别,但我想说RegExp.test()是正确的,因为只要字符串中有数字,您的正则表达式就会匹配,并且String.matches()行为类似于正则表达式周围的锚点。

''d+(?:''.''d+)?

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

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

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