這個正則表達式有什麼區別:/(everything|cool)/gi
和這個:/(?:everything|cool)/gi
?正則表達式:性能
我問這個,因爲我有一個正則表達式,我無法給自己寫 *這和有,因爲你可以看到下面,很多?:
在正則表達式。我讀過?:
對性能不利的地方,所以我想刪除它。我可以刪除它,還是對任何事情都很重要?
* (?:(?=(?:(?:\\.|"(?:\\.|[^"\\])*"|[^\\'"])*'(?:\\.|"(?:\\.|[^"'\\])*"|[^\\'])*')*(?:\\.|"(?:\\.|[^"\\])*"|[^\\'])*$)(?=(?:(?:\\.|'(?:\\.|[^'\\])*'|[^\\'"])*"(?:\\.|'(?:\\.|[^'"\\])*'|[^\\"])*")*(?:\\.|'(?:\\.|[^'\\])*'|[^\\"])*$)(?:\\.|[^\\'"]))+
非捕獲組更快速的關鍵在於它們允許RE引擎進行大量優化。捕獲組需要更多的信息由匹配器保存,並且會導致很多更復雜的優化(例如轉換爲單通DFA)。 – 2012-04-15 17:49:20
奇怪的是,我發現一個非捕獲組的性能比甚至沒有組都要好。 :P http://jsperf.com/regex-capture-vs-non-capture/2(可能v8具體) – cHao 2012-04-15 17:51:16
這是一個非常好奇的結果。我想知道是否有任何問題垃圾收集踢? (我懷疑那是當我在該頁面上運行測試時發生的事情......) – 2012-04-15 18:05:26