2013-03-07 43 views
10

打開瀏覽器控制檯,並執行以下代碼:JavaScript測試()在正則表達式中保存狀態?

var foo = /foo/g; 

然後,

foo.test("foo") // true 

然後,

foo.test("foo") // false 

如果繼續執行foo.test( 「富」 ),你會看到交替的真/假響應,就好像var foo實際上被修改一樣。

任何人都知道爲什麼會發生這種情況?

回答

9

是的,.test().exec()的工作方式是正則表達式是g全局。他們從最後一場比賽結束時開始。

您可以使用.lastIndex屬性觀察正則表達式對象上當前的最後一個索引。

這是一個可寫屬性,因此如果需要,您可以將其重置爲0。當正則表達式在沒有找到匹配的情況下運行時,它會自動重置爲0

1

正則表達式保留最後一次測試的位置。這允許搜索長字符串。你可以通過設置lastIndex = 0來重置它;