2015-10-06 89 views
0

這可能是挑剔的,但我想知道使用正則表達式時最有效的工作流程是什麼;我應該只使用testexecexec嗎?正則表達式 - 測試或匹配

例如:我有一個正則表達式,用於刪除最後一個字符(\w)後的所有非字(\W)。

E.g.

var str = 'Example string with _some weird formatting at the end *_&^', 
    reg = /(.*\w)/; 

更重要的是有效的:

if (reg.test(str)) { 
    str = reg.exec(str)[0]; 
} 

var res = reg.exec(str); 
str = (res && res[0]) || str; 

此外,有沒有辦法既可以導致異常被拋出?

+2

最有效的是不使用'test'或'exec',而是使用'replace'目錄ectly。 –

回答

2

底線:與大多數方法相比,正則表達式很昂貴。

reg.test()reg.exec()將分別運行鍼對目標str表達,所以這將是比剛剛運行reg.exec()更加昂貴。


但是,如果你想更換數據,你可以使用str.replace()

str = str.replace(/\W+$/, ''); 

這不僅是速度快(只需評價一個表達式),但也務實。沒有比實用的解決方案好多了!


注:如有疑問,test

+0

有沒有什麼時候我會使用'RegExp.exec'而不是'String.replace'? 'RegExp.exec'在使用'global'標誌時會做一些有趣的「事情」(我還沒有完全弄清楚)。 – keldar

+1

@keldar ...如果你想替換文本,使用'String.replace()'。如果你想搜索一個字符串,使用'RegExp.exec()'。如果你只需要一個'true' /'false'返回值,可以使用'RegExp.test()'或'String.search()'。 *(轉自[MDN文檔](https://developer.mozilla。org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec))* – Sam

1

您可以使用名爲jsperf.com的非常有用的站點來比較不同的測試用例性能。

您可以檢查的基準比較的兩個代碼之間的位置:

test with exec VS exec-only

這是結果:

enter image description here

enter image description here

+0

同樣 - 不知道爲什麼,但看不出什麼明顯的。 – keldar

+0

@keldar你的問題是相當有效的,但是你可能對什麼是歪曲的有了一個想法,但你可以看到一個基準結果,報告,度量和數字,以準確理解你有什麼想法。希望基準對你的洞察力有所幫助 –

+0

對不起 - 有人刪除了他們的評論,說「代碼在jsPerf上產生錯誤」,我回復說「同樣 - 」,我收到錯誤信息,「看不到任何明顯的東西」 ,在設置中沒有明顯的錯誤。你的jsPerf非常有幫助! – keldar