貼出來(lái)與大家共勉。
先看一段代碼,
<script>
var objReg = /^[a-zA-Z]{1}(:){1}$/gi;
alert(objReg.test(“a:”));//返回true
alert(objReg.test(“a:”));//返回false
</script>
為什么第二個(gè)test會(huì)返回false?是不是覺(jué)得奇怪。
原因我解答如下:
test實(shí)際上與exec方法的執(zhí)行方法是一致的,只是返回值不一樣。test返回的是true or false(如果exec返回的不是null),exec返回的是pattern(匹配)。
而exec的執(zhí)行過(guò)程為:帶有g(shù)參數(shù)時(shí),下次匹配時(shí),自動(dòng)會(huì)跳到lastIndex后的位置,也就是這里的第2個(gè)位置。而這個(gè)位置與pattern顯然不匹配。因此返回false。
解決方法:
(1)
可以不使用g(全局參數(shù))也就是這樣-
<script>
var objReg = /^[a-zA-Z]{1}(:){1}$/i;
alert(objReg.test(“a:”));//返回true
alert(objReg.test(“a:”));//返回true
</script>
(2)
可以用lastIndex=0來(lái)還原-
var objReg = /^[a-zA-Z]{1}(:){1}$/gi;
alert(objReg.test(“a:”));//返回true
objReg.lastIndex=0;
alert(objReg.test(“a:”));//返回true