发现js的test方法两次执行返回不同结果。高手说说这个是什么原因。
<script type= "text/javascript ">
<!--
var re = /^\d+(?:\.\d)?$/ig;
alert(re.test( '112.3 '));
alert(re.test( '112.3 '));
//-->
</script>
结果:true false
这个test方法太BT了,搞了我一上午,现在用search代替了,但始终不明白为什么?各位兄弟知道的,给兄弟指点下。
------解决方案--------------------test 方法
返回一个 Boolean 值,它指出在被查找的字符串中是否存在模式。
rgexp.test(str)
参数
rgexp
必选项。包含正则表达式模式或可用标志的正则表达式对象。
str
必选项。要在其上测试查找的字符串。
说明
test 方法检查在字符串中是否存在一个模式,如果存在则返回 true,否则就返回 false。
全局 RegExp 对象的属性不由 test 方法来修改。
示例
下面的例子举例说明了 test 方法的用法:
function TestDemo(re, s){
var s1; // 声明变量。
// 检查字符串是否存在正则表达式。
if (re.test(s)) // 测试是否存在。
s1 = " contains "; // s 包含模式。
else
s1 = " does not contain "; // s 不包含模式。
return( " ' " + s + " ' " + s1 + " ' "+ re.source + " ' "); // 返回字符串。
}
------解决方案--------------------是/g的原因
------解决方案-------------------- <script type= "text/javascript ">
<!--
var re = /^\d+(?:\.\d)?$/ig;
alert(re.lastIndex );
alert(re.test( '112.3 '));
alert(re.lastIndex );
alert(re.test( '112.3 '));
//-->
</script>
lastIndex Property
This property is an integer that specifies the index at which to start the next match, but is only set if the regular expression uses the 'g ' flag to specify a global search.
Syntax: object.lastIndex
------解决方案--------------------test会修改lastIndex的值
第一次匹配后lastIndex在字符串末尾,就是字符串的长度了
第二次从末尾这个位置这个匹配肯定找到到了
<script type= "text/javascript ">
<!--
var re = /^\d+(?:\.\d)?$/ig;
alert(re.test( '112.3 '));
re.lastIndex=0;//加这句试试
alert(re.test( '112.3 '));
//-->
</script>