這裏有兩行很有意思的代碼:
re=/1{1,4}$/ig;
re.test(“1234”);
理論上輸出應該是true,但是實際執行效果卻是這樣的,test交替輸出true和false:
test交替輸出true和false
這顯然不是開發者所期待的執行效果。使用compile()一下之後,恢復正常。執行效果如下:
該效果在IE、FF、Chrome上均可重現。
發生交錯的原因在於,加了參數g(全局模式)時,每次test之後,下次使用本次lastIndex的值做起點了。而compile()後的對象每次都會復位lastIndex到0.
可見,compile()的價值依然是存在的。然而,在MDN文檔裏明確說明,該方法已經過時了,不應使用。
RegExp.prototype.compile()
developer.mozilla.org
圖標
所以,這是一個國際標準與瀏覽器廠商實現之間的矛盾了。
0-9A-Za-z ↩︎