1. 程式人生 > >為什麼要學會正則表示式

為什麼要學會正則表示式

  一直以來,我都認為能手寫正則表示式的人都是大神,至少不會是坑。正則表示式這個知識領域,在各種語言中被大神們運用的淋漓盡致。作為一個菜雞程式設計師,向大神看齊的最簡單的方式就是寫一手簡單粗暴的正則表示式。

  正則表示式是幹什麼的呢?

  舉個最簡單的例子,今天下午的時候測試人員給我提了一個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);
}

  正則表示式或許枯燥無味,但是一旦開啟,將會是一個威力巨大的武器.

  看我神威,無堅不摧。