一直以來,我都認為能手寫正則表達式的人都是大神,至少不會是坑。正則表達式這個知識領域,在各種語言中被大神們運用的淋漓盡致。作為一個菜雞程序員,向大神看齊的最簡單的方式就是寫一手簡單粗暴的正則表達式。
正則表達式是干什么的呢?
舉個最簡單的例子,今天下午的時候測試人員給我提了一個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); }
正則表達式或許枯燥無味,但是一旦開啟,將會是一個威力巨大的武器.
看我神威,無堅不摧。
