一個關於JS正則的問題:
以下是我寫的,比較弱性的匹配一個 三位數整數或三位數,兩位浮點小數的正則表達式。
/^[1-9]\d{0,2}(.\d{0,2})?$/gi.test(111.12)
在chrome下可以一直輸出true,到此無疑問。
可當我
var patt = /^[1-9]\d{0,2}(.\d{0,2})?$/gi時,
在chrome下用patt.test(111.12)時,
出現的情況時,一次true,一次false。請問這倆方法有本事的不同嗎?
我也用 var patt = new RegExp("***",gi)這樣的方式來寫。
出現的情況也是true一次false一次。
有人知道這個問題的答案嗎
PS:CSDN這個問題匹配的AJAX太卡人了。。。郁悶,寫個問題title用了3分鐘。
/^[1-9]\d{0,2}(.\d{0,2})?$/gi.test(111.12)這樣相當於每次生成一個正則來測試你的字符
用變量保存添加了g選項會出現這個問題,去掉g選項即可。。添加g選項會從上一個找到的位置開始查找
var patt = /^[1-9]\d{0,2}(.\d{0,2})?$/i
在創建正則表達式對象時如果使用了“g”標識符或者設置它了的global屬性值為ture時,那麼新創建的正則表達式對象將使用模式對要將要匹配的字符串進行全局匹配。在全局匹配模式下可以對指定要查找的字符串執行多次匹配。每次匹配使用當前正則對象的lastIndex屬性的值作為在目標字符串中開始查找的起始位置。lastIndex屬性的初始值為0,找到匹配的項後lastIndex的值被重置為匹配內容的下一個字符在字符串中的位置索引,用來標識下次執行匹配時開始查找的位置。如果找不到匹配的項lastIndex的值會被設置為0。當沒有設置正則對象的全局匹配標志時lastIndex屬性的值始終為0,每次執行匹配僅查找字符串中第一個匹配的項。可以通下面的代碼來查看在執行匹配相應的lastIndex 屬性的值。
具體看這個:http://www.cnblogs.com/rentj1/archive/2011/04/26/2029872.html