【问题标题】:test method of RegExp GWT/JavascriptRegExp GWT/Javascript的测试方法
【发布时间】:2011-05-13 03:23: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() 获得相同的行为?

【问题讨论】:

  • 两个答案都很好并且解决了我的问题,所以现在我应该接受哪一个,因为它们基本上是相同的答案?

标签: java javascript regex gwt


【解决方案1】:

尝试将正则表达式更改为

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

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

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

【讨论】:

    【解决方案2】:

    我不知道有什么区别,但我会说RegExp.test() 是正确的,因为只要字符串中有数字,您的正则表达式就会匹配,而String.matches() 的行为就像正则表达式周围的锚点一样。

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-02
      相关资源
      最近更新 更多