ディレクタこそ正規表現

    こんばんわ、Tシャツもピッシャピシャになるジットリとした暑さのこの夏。
    夜は湿度高いくせに涼しくて風邪もひきやすい今年の夏。
    いかがおすごしですか、加藤です。

    ところで正規表現て楽しいですよね。
    なんか好きです。正規表現。まず名前が好きです。カッコイイ!
    普段Javascriptを書くときもついついRegExpを多用してしまいがちです。(処理が重くなるので控えましょう)

    たとえばURLを加工して必要な情報を取ってみたり。
    たとえばユーザ入力値をバリデートしてみたり。
    画像の名前を変換して差し替えてみたり。
    使い道は山ほどある正規表現ですが、ディレクタこそ正規表現を多用する作業が多いのではないかと最近思っています。


    たとえば、CSVを投入するようなシステムの場合エクセルで編集するのが常ですが、一通りの値を書き換えるのとか面倒くさいですよね。
    そういうときは好きなエディタでCSVを開いて一括で変換するのが素敵。
    自分の場合はEmEditorを使っています。

    例:

    CSVの行によってURLのパス指定が間違えてる!

    ID NAME URL
    1 contents01 https://vitalify.jp/hogehoge/fuga.html
    2 contents02 http://www.vitalify.jp/foo.html
    3 contents03 https://vitalify.jp/hoge/bar.html
    4 contents04 https://vitalify.jp/vitalify.php
    5 contents05 http://www.vitalify.co.jp/hogehoge/hoge.html

    実はこれ

    1. 1.ドメインはvitalify.jp(wwwなし)
    2. 2.全部”hoge/”直下のはず
    3. 3.phpはありえなくて全部.html
    4. 4.SSLは間違い

    だった場合、どうやって直しましょうか。
    普通の置き換えだと数回に分けないといけないですが正規表現なら

    \thttps?://w*\.?vitalify(\.co)?\.jp/(.+/)?(.+)\.(html|php)
    =>https://vitalify.jp/hoge/\3.html
    ID NAME URL
    1 contents01 https://vitalify.jp/hoge/fuga.html
    2 contents02 https://vitalify.jp/hoge/foo.html
    3 contents03 https://vitalify.jp/hoge/bar.html
    4 contents04 https://vitalify.jp/hoge/vitalify.html
    5 contents05 https://vitalify.jp/hoge/hoge.html

    一回で済みました!
    EMEditorだとコレでうまくいきますがものによっては最大マッチになっちゃうのでこのままだとうまくいかないかもしれません。
    その場合は

    \thttps?://w*\.?vitalify(\.co)?\.jp/([^/]+/)?([^\.]+)\.(html|php)
    =>https://vitalify.jp/hoge/\2.html

    だといいかもしれませんね。

    解説:

    \t
    タブ
    \n
    改行
    https?
    “s”があってもなくても
    w*
    “w”が0文字以上
    \.
    “.”が正規表現の条件に使う句なのでエスケープします
    (\.co)?
    “\.co”という一まとまりを作ってそれがあってもなくても
    [^/]
    “/”以外の何か
    [^/]+
    “/”以外の何かを1文字以上
    (html|php)
    “html”もしくは”php”

    まぁこの解説じゃわからない人はわからないしわかってる人は「それで?」って感じにしかならないので残念ですね。