2015-10-25 26 views
4

免責聲明:我的問題是不是集中在演習中,這只是一個例子(但如果你對自身例如什麼有趣的提示,隨時分享!)。在RegExp#test中使用捕獲組是否存在性能損失?

說我在JavaScript中解析一些字符串與正則表達式的工作,我的主要焦點是性能(速度)。

我有一塊正則表達式的,檢查的數字串,然後用Number如果它的數字解析:

if (/^\[[0-9]+]$/.test(str)) { 
    val = Number(str.match(/^\[([0-9]+)$/)[1]); 
} 

注意如何條件測試沒有圍繞數字的捕獲組。這導致寫出基本相同的正則表達式兩次,除了第二次捕獲組。

我想知道這是;並增加了捕獲組在條件旁邊test()使用正則表達式以任何方式影響性能?我只想在兩個地方使用捕獲正則表達式,只要沒有性能問題。

而且到了一個問題,爲什麼我做test()然後match()而不是match()和檢查null;我想在發生錯誤時儘可能快地進行解析,但在碰到問題時可以慢一點。

如果不是從上面清楚的,我指的是JavaScript的正則表達式引擎 - 儘管如果多個引擎不同,因爲它會是不錯的太瞭解。我在這裏專門研究Node.js,它應該在JS引擎中有所不同。

在此先感謝!

回答

1

做2個正則表達式 - 它們的作用域非常相似 - 幾乎總是比做一個更慢,因爲正則表達式很貪婪(這意味着它們會嘗試儘可能匹配,通常意味着採取最大量可能的時間)。

你所要求的基本上是:在最壞的情況下(比如使用.test來節省內存從捕獲中獲取)比使用額外內存更快嗎?答案是否定的,使用額外的內存加速你的過程。

不要拿我的話說,雖然,這是一個jsperf:http://jsperf.com/regex-perf-numbers

相關問題