打開瀏覽器控制檯,並執行以下代碼:JavaScript測試()在正則表達式中保存狀態?
var foo = /foo/g;
然後,
foo.test("foo") // true
然後,
foo.test("foo") // false
如果繼續執行foo.test( 「富」 ),你會看到交替的真/假響應,就好像var foo實際上被修改一樣。
任何人都知道爲什麼會發生這種情況?
打開瀏覽器控制檯,並執行以下代碼:JavaScript測試()在正則表達式中保存狀態?
var foo = /foo/g;
然後,
foo.test("foo") // true
然後,
foo.test("foo") // false
如果繼續執行foo.test( 「富」 ),你會看到交替的真/假響應,就好像var foo實際上被修改一樣。
任何人都知道爲什麼會發生這種情況?
是的,.test()
和.exec()
的工作方式是正則表達式是g
全局。他們從最後一場比賽結束時開始。
您可以使用.lastIndex
屬性觀察正則表達式對象上當前的最後一個索引。
這是一個可寫屬性,因此如果需要,您可以將其重置爲0
。當正則表達式在沒有找到匹配的情況下運行時,它會自動重置爲0
。
正則表達式保留最後一次測試的位置。這允許搜索長字符串。你可以通過設置lastIndex = 0來重置它;