RegExp-GWT/Javascript的测试方法
我想通过使用正则表达式来检测RegExp-GWT/Javascript的测试方法,java,javascript,regex,gwt,Java,Javascript,Regex,Gwt,我想通过使用正则表达式来检测字符串是否为十进制。我的问题更多的是如何使用正则表达式机制,而不是检测字符串是否是十进制。我使用GWT提供的RegExp类 String regexDecimal = "\\d+(?:\\.\\d+)?"; RegExp regex = RegExp.compile(regexDecimal); String[] decimals = { "one", "+2", "-2", ".4", "-.4", ".5", "2.
字符串
是否为十进制。我的问题更多的是如何使用正则表达式机制,而不是检测字符串
是否是十进制。我使用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]));
}
我希望String.matches()
和RegExp.test()
两个方法都返回相同的结果
RegExp.test()
获得相同的行为尝试将正则表达式更改为
"^\\d+(?:\\.\\d+)?$"
说明
双重转义是因为我们在Java中。。。
正则表达式从
^
开始,强制正则表达式从字符串的最开始匹配。
regex end with
$
强制regex从字符串的最末端匹配
这就是让String.matches()与GWT RegExp.test()执行相同操作的方法。我不知道两者的区别,但我想说,
RegExp.test()
是正确的,因为只要字符串中有一个数字,正则表达式就会匹配,String.matches()
的行为就像正则表达式周围的锚一样
\\d+(?:\\.\\d+)?
您的非捕获组是可选的,因此一个\\d
([0-9]
)就足以匹配,无论周围是什么
当您将锚添加到正则表达式时,这意味着它必须从头到尾匹配字符串,然后RegExp.test()
可能会显示相同的结果
^\\d+(?:\\.\\d+)?$
两个答案都很好,解决了我的问题,既然它们基本上是相同的答案,那么现在我接受哪一个呢?
^\\d+(?:\\.\\d+)?$