一直以來,我都認爲能手寫正則表達式的人都是大神,至少不會是坑。正則表達式這個知識領域,在各類語言中被大神們運用的淋漓盡致。做爲一個菜雞程序員,向大神看齊的最簡單的方式就是寫一手簡單粗暴的正則表達式。ios
正則表達式是幹什麼的呢?程序員
舉個最簡單的例子,今天下午的時候測試人員給我提了一個bug,而且打上了嚴重的標籤。其實看到這個bug的一瞬間,我就意識到是ios對Date方法的一下兼容性問題。至於在哪裏出現的,對於我這個剛接觸到移動端的人來講很迷茫。正則表達式
查了一下資料發現ios對new Date("2017-08-11 12:00:00")這個方法貌似不是很感冒,ios中不支持 「-」 鏈接日期。所以,因爲後臺傳來的數據有兩種,第一張是毫秒級別的時間戳,另外一種就是「-」分割的日期。那麼問題來了,如何區別這兩種數據格式呢,其實我在看後端傳來的數據時,有的毫秒數是傳來的字符串的形式,所以單單地靠區分字符串仍是數字是沒法判斷的。除了經過判斷indexOf('-')是否大於-1以外,根據本文主題,咱們還可使用正則來判斷:/-/.test('2018-01-01')。其中/-/就是一個用於匹配「-」的正則表達式,test()是正則表達式用於計算的方法。後端
言歸正傳,當區分完成毫秒數仍是帶「-」的字符串以後,縱使咱們可使用簡單的字符串轉數組而後再轉字符串的方式解決,可是太繁瑣太笨重。此時,能寫一手簡單粗暴的正則表達式就變得尤其的重要。首先,咱們要匹配出全部的「-」,而後將其替換成「/」。所以,咱們要使用replace()這個方法。str.replace(/\-/g, "/"),因爲要匹配全部的「-」,咱們使用了g這個全局修飾符,g等同於global,全局的意思。數組
因而乎,一個看似棘手的問題,咱們能夠經過兩個正則表達式和四行代碼解決:測試
if (/-/.test(time)) { let date = new Date(time.replace(/\-/g, "/")); } else { let date = new Date(time); }
正則表達式或許枯燥無味,可是一旦開啓,將會是一個威力巨大的武器.spa
看我神威,無堅不摧。code