RegExp-GWT/Javascript的java测试方法
我想通过使用正则表达式来检测String
是否为十进制。我的问题更多地是关于如何使用正则表达式机制,而不是检测aString
是十进制。我使用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()
返回相同的结果
- 那么两者之间的区别是什么呢 两种方法李>
- 如何使用
RegExp.test()
获得相同的行为李>
# 1 楼答案
我不知道有什么不同,但我想说
RegExp.test()
是正确的,因为只要字符串中有一个数字,正则表达式就会匹配,而且String.matches()
的行为就像正则表达式周围的锚一样您的非捕获组是可选的,因此一个
\\d
([0-9]
)就足以匹配,无论周围是什么当你向正则表达式添加锚时,这意味着它必须从头到尾匹配字符串,然后
RegExp.test()
可能会显示相同的结果# 2 楼答案
尝试将正则表达式改为
解释
双重逃逸是因为我们在爪哇。。。
regex start with
^
强制regex从字符串的最开始匹配。regex end with
$
强制regex从字符串的最末端匹配这就是你应该得到字符串的方式。匹配()以执行与GWT RegExp相同的操作。测试()