2014-07-12 46 views
0

這是我的代碼中的功能的第一部分:我該如何解決這個正則表達式函數?

var pattern = new RegExp(myTypedString,"gi"); 

的目標是我在文本字段中鍵入填充的效果。每次輸入事件通過字符串數組觸發我環路和檢查,如果在我使用此代碼字符串數組存在我輸入字符串:

return pattern.test(myArrayString); 

但幸運的是我已經意識到,其中一個結果是錯誤的,它只發生在這種特殊情況下:當我輸入「t」或「T」時,我沒有在「特拉法加廣場」(來自myArrayString的字符串)中匹配,所以我在控制檯中進行了一些調試,檢查變量模式做console.log(pattern)它輸出這個字符串:/t/gi,我認爲這是我的問題依賴...(在此後)

當我試圖複製問題類型:

var pattern = new RegExp('t',"gi") 

和:

pattern.test('Trafalgar Square') 

,給了我true在第一次嘗試,但是...如果我再次鍵入此:

pattern.test('Trafalgar Square') 

結果將是false,如果我繼續,true,false,true,false,...

我想到的第一件事情之一是/t在正則表達式/t/gi可能是一個規則,但我無法找到任何有關它。

我想知道對這個意外結果的解釋,但是我也擔心我的功能並不完美,所以我問你我該如何改進這個功能?謝謝

回答

4

它交替truefalse之間,因爲它與第一次(true)匹配,則嘗試的第二匹配,這將失敗,因爲在Trafalgar Square只有一個噸。當你再次調用它時,它會循環回來,因此true,false,true等等

爲了匹配之前解決這個問題,更新其光標:

​​

這裏是一個有關jsfiddle與一對夫婦的例子。

+1

我更新了我的代碼,我打算使用'test',但是我用'lastIndex'來匹配。 – bfontaine

+0

你知道嗎,我使用比賽是錯誤的。這是最好的方法!我刪除了我之前的評論,不讓任何人被我的錯誤所迷惑:) – w3jimmy

1

我不知道它爲什麼在真假之間交替(我也可以重現它)。在正則表達式中,/t/不應該是特別的。它不是像{\[這樣的特殊字符,應該只是字面字符t。

但是你可以使用另一個函數來實現更多或更少相同:

'Trafalgar Square'.match(pattern) 
=> Array [ "T" ] 

'lalala'.match(pattern) 
=> null 

比賽需要稍多的資源比測試將,但是這通常不是一個問題。結果將是匹配的數組,或者當沒有匹配時爲null,所以你可以返回它,其餘的代碼可能會工作得很好。陣列...將是一個truthy值和null將是一個虛假值。