2016-08-12 34 views
1
var ts = "00:00:06,705"; 

var regularExpression = /([0-9]+):([0-9]{2}):([0-9]{2}),([0-9]{3})/g; 
var parsedTs1 = regularExpression.exec(ts); 
var parsedTs2 = regularExpression.exec(ts); 

parsedTs1顯示正確的結果,但運行此腳本後,parsedTs2變量爲空。正則表達式exec函數不能多次工作

但是,當我們最後刪除最後一個'g'字符時,這個效果很好。

根據文檔,選項標誌g表示全局搜索,這與本案無關。

我們如何多次使用定義的正則表達式字符串來匹配字符串?從here

+0

什麼是儲存在'無功parsedTs1' –

+0

使用'.test'或'字符串值#search'由於以下答案中給出的原因 –

+0

'/ g'標誌允許正則表達式遍歷同一個字符串內的多個不重疊匹配。當它返回'null'時,它告訴你沒有更多的匹配。 –

回答

2

引用:

正則表達式對象保持狀態。例如,exec 方法不是冪等的,連續調用可能會返回不同的 結果。調用exec會產生這種行爲,因爲常規的 表達式對象會記住從 全局標誌設置爲true時搜索的最後一個位置。

如果你想將它命名多次,你可以手動重置最後一個索引每次通話後:

var parsedTs1 = regularExpression.exec(ts); 
regularExpression.lastIndex = 0; 
var parsedTs2 = regularExpression.exec(ts); 
+0

更好的引用和解釋可以在http://stackoverflow.com/questions/11477415/why-does-javascripts-regex-exec-not-always-return-the-same-value找到。 –