はい!今やってます!

Work Pertly, Live Idly

GoでMarkdown内の画像コンテンツを正規表現でマッチさせる

// Match image file path
r := regexp.MustCompile(`\!\[.+?\]\(([^\s\)]+).*\)`)
match := r.FindAllStringSubmatch(content, -1)

// Image Tag Pattern
// ![foo](/image/hoge/fuga.jpg)
// ![foo](/image/hoge/fuga.jpg "画像タイトル")
// [![foo](/image/hoge/fuga.jpg)](リンクURL)

// regexp result sample
// match => [[![foo](/image/hoge/fuga.jpg) /image/hoge/fuga.jpg] [![foo](/image/hoge/fuga.jpg) /image/hoge/fuga.jpg] ....]
// match[0] =>  [![foo](/image/hoge/fuga.jpg) /image/hoge/fuga.jpg]
// match[0][0] =>  ![foo](/image/hoge/fuga.jpg)
// match[0][1] =>  /image/hoge/fuga.jpg

JavaScriptで分割代入したいとき

JavaScriptには分割代入構文があって、オブジェクトリテラルから値を展開する変数を宣言することができる。 例として、

let { bar } = foo

この場合bar という名前の変数を作成し、かつオブジェクト foo の同名キーから対応する値を代入するようになる。

「連続〇〇日〇〇しました」みたいなStreakを計算したいときのSQLをMySQLで

Streakを計算したいときに思い出すSQL

SELECT MAX(streak) AS streak
FROM (
   SELECT 
     tmp1.*, 
     IF(
       @prev + INTERVAL 1 DAY = tmp1.date, 
       @streak := @streak + 1, 
       @streak := 1
     ) AS streak, 
     @prev := tmp1.date
   FROM (
       SELECT 
         date
       FROM logs
       WHERE user_id = ?
       group by date
       order by date asc 
   ) AS tmp1
   INNER JOIN (SELECT @prev := NULL, @streak := 1) AS vars
) AS tmp2

MySQL5.7系では動作確認済み。