2013-12-14 65 views
0

這可能是我做錯了或者我的理解不正確,但我試圖弄清楚爲什麼'teest'在下面的測試中沒有返回true。看來它應該在以下每種情況下返回true:JavaScript Regexp.test返回意想不到的結果

var r = RegExp("te", "gi"); 
r.test("test"); 
// true 
r.test("teest"); 
// false 
r.test("teset"); 
// true 
var r = RegExp("tee", "gi"); 
r.test("teesting"); 
// true 
r.test("teeest"); 
// true 
+1

哪個瀏覽器?在這裏返回true:http://jsfiddle.net/wGLSx/ –

+2

爲什麼在'.test'中使用'g'標誌?沒有意義。無論是否存在,不管它是否存在多次。 – jfriend00

+1

刪除'g',它會起作用 –

回答

0

在評論中指出,我需要刪除g。哪個工作完美。

0

聽起來像你找到了你的解決方案,但萬一你在乎:當你使用全局選項(g)時,r.lastIndex更新爲2之後的第一個test()。下面test()檢查開始於索引2的輸入字符串不匹配正則表達式:

var r = RegExp('te', 'gi'); 
// r.lastIndex == 0 
r.test('test'); 
// true, r.lastIndex == 2 
r.test('test'); 
// false, r.lastIndex == 0 

正如你已經發現了,你可以簡單地刪除全局選項。您也可以重置r.lastIndex的值,或者您可以遍歷每個輸入字符串,直到test()返回false。