看到一個JS正則的題
更新時間:2007年01月09日 00:00:00 作者:
貼出來與大家共勉。
先看一段代碼,
<script>
var objReg = /^[a-zA-Z]{1}(:){1}$/gi;
alert(objReg.test("a:"));//返回true
alert(objReg.test("a:"));//返回false
</script>
為什么第二個test會返回false?是不是覺得奇怪。
原因我解答如下:
test實(shí)際上與exec方法的執(zhí)行方法是一致的,只是返回值不一樣。test返回的是true or false(如果exec返回的不是null),exec返回的是pattern(匹配)。
而exec的執(zhí)行過程為:帶有g(shù)參數(shù)時,下次匹配時,自動會跳到lastIndex后的位置,也就是這里的第2個位置。而這個位置與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來還原-
var objReg = /^[a-zA-Z]{1}(:){1}$/gi;
alert(objReg.test("a:"));//返回true
objReg.lastIndex=0;
alert(objReg.test("a:"));//返回true
先看一段代碼,
<script>
var objReg = /^[a-zA-Z]{1}(:){1}$/gi;
alert(objReg.test("a:"));//返回true
alert(objReg.test("a:"));//返回false
</script>
為什么第二個test會返回false?是不是覺得奇怪。
原因我解答如下:
test實(shí)際上與exec方法的執(zhí)行方法是一致的,只是返回值不一樣。test返回的是true or false(如果exec返回的不是null),exec返回的是pattern(匹配)。
而exec的執(zhí)行過程為:帶有g(shù)參數(shù)時,下次匹配時,自動會跳到lastIndex后的位置,也就是這里的第2個位置。而這個位置與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來還原-
var objReg = /^[a-zA-Z]{1}(:){1}$/gi;
alert(objReg.test("a:"));//返回true
objReg.lastIndex=0;
alert(objReg.test("a:"));//返回true
相關(guān)文章
javascript正則表達(dá)式處理中文和中文標(biāo)點(diǎn)符號的過程
在寫項(xiàng)目時遇到需要匹配字符串中所有的漢字并且包括簡單的中文標(biāo)點(diǎn)符號,下面這篇文章主要給大家介紹了關(guān)于javascript正則表達(dá)式處理中文和中文標(biāo)點(diǎn)符號的相關(guān)資料,需要的朋友可以參考下2024-02-02代替正則——HyperScriptExpression聯(lián)合開發(fā)倡議公告
代替正則——HyperScriptExpression聯(lián)合開發(fā)倡議公告...2007-01-01python實(shí)現(xiàn)統(tǒng)計漢字/英文單詞數(shù)的正則表達(dá)式
一個簡單的程序,統(tǒng)計文本文檔中的單詞和漢字?jǐn)?shù),逆序排列(出現(xiàn)頻率高的排在最前面)python實(shí)現(xiàn)2012-09-09正則表達(dá)式驗(yàn)證身份證號碼和郵箱、判斷checked選中狀態(tài)
這篇文章主要介紹了正則表達(dá)式驗(yàn)證身份證號碼和郵箱、判斷checked選中狀態(tài)的相關(guān)知識,需要的朋友可以參考下2017-07-07