读书人

正则表达式回来结果为何不同

发布时间: 2013-03-01 18:33:02 作者: rapoo

正则表达式返回结果为何不同
<script type="text/javascript">
<!--
var re=new RegExp(/^-?\d+$/g);
alert(re.test("22"));
alert(re.test("22"));
alert(re.test("22"));
alert(re.test("22"));
alert(re.test("22"));
//-->
</script>
为何
第一次返回 true
第二次返回 false
第三次返回 true
第四次返回 false
。。。。。。。。。。。。。。。。 正则表达式
[解决办法]


var re=new RegExp('^-?\\d+$');
alert(re.test("22"));
alert(re.test("22"));
alert(re.test("22"));
alert(re.test("22"));
alert(re.test("22"));

或者

var re=/^-?\d+$/;
alert(re.test("22"));
alert(re.test("22"));
alert(re.test("22"));
alert(re.test("22"));
alert(re.test("22"));

不要g
[解决办法]
js 正则表达式 有两种写法:一个是 正则表达式字面量方式reg=/^xxxxxxxxxxx$/img,另一种就是 利用 RegExp构造函数 var reg=new RegExp("普通字符串","img标识符").
[解决办法]
主要是lastIndex在作怪,因为你加了g修正符,所以内部会有个属性即lastIndex保存上次匹配后,下次匹配的起始位置,发现到达串尾会有个重置操作,所以你的例子出现了true,false交叠的情况。
要么不要g,要么自己置0.
  <script type="text/javascript">
<!--
var re=new RegExp(/^-?\d+$/g);
alert(re.test("22"));
re.lastIndex = 0;
alert(re.test("22"));
re.lastIndex = 0;
alert(re.test("22"));
re.lastIndex = 0;
alert(re.test("22"));
re.lastIndex = 0;
alert(re.test("22"));
re.lastIndex = 0;
//-->
</script>

[解决办法]
你既然用了 ^$ ,那就是在格式验证了,所以就不要用g来全文匹配了

读书人网 >JavaScript

热点推荐