regular expressions


請先讀完 regexp 講義簡介反白練習 兩篇, 並且約略瀏覽過 規則列表, 再回來看這篇。

讀檔、 拆解字串、 抓取陣列的一小段:

    fs = require('fs')
    accessLog = fs.readFileSync('access_log', 'utf8')
    typeof accessLog
    typeof(accessLog)
    accessLog.length
    accessLog = accessLog.split('\n')
    typeof accessLog
    accessLog.length
    accessLog.slice(50,60)

javascript 的 regular expressions:

    x = accessLog[50]
    x.match(/2005:\d\d/)
    x.match(/abcde/)
    x.match(/2005:\d\d/)[0]
    x.match(/2005:\d\d/)
    x.match(/2005:(\d\d)/)
    x.match(/2005:(\d\d)/)[1]
    /abcde/.exec(x)
    /2005:(\d\d)/.exec(x)
    /2005:(\d\d)/.exec(x)[1]

代換: replace 是一個 non-destructive 的函數。

x = 'this fish is his'
x.replace(/is/g, '*')
x

有的時候 regexp 的值來自變數而不是寫死的。 這時可以:

re = new RegExp(/is/,'g')
x.replace(re,'---')

作業:

  1. 請解釋 accessLog.slice(50,60).map(function (x) { return x.match(/2005:(\d\d)/)[1]; })
  2. 請抓出 accessLog 裡面所有的 IP
  3. 請抓出 accessLog 裡面所有的 「年月日」 欄位
  4. 請抓出 accessLog 裡面所有的 「瀏覽器」 欄位
  5. 請抓出 accessLog 裡面所有的 「造訪網頁」 欄位