正規表現で特定の文字列のあと or まえの情報だけとりたい
数年に一回ぐらいこういう正規表現を書こうとしてどうやって書くんだっけ……とわけがわからなくなるので備忘録用メモ。
たとえばこういうURL(https://www.tiktok.com/@kyoookosan/video/6883074502054432002)
から/video/の後の数字列だけを抜き出したい時(用途としてはvimeoのembedをこのIDから組み立てたい)
正規表現的にはこう
/(?<=video\/)\d{10,}/
ruby pry
[1] pry(main)> url = "https://www.tiktok.com/@kyoookosan/video/6883074502054432002"
=> "https://www.tiktok.com/@kyoookosan/video/6883074502054432002"
[2] pry(main)> url.match(/(?<=video\/)\d{10,}/)
=> #<MatchData "6883074502054432002">
後ろじゃなくて特定文字列の前を取りたい場合はこう
[1] pry(main)> url = "https://www.tiktok.com/@kyoookosan/video/6883074502054432002"
=> "https://www.tiktok.com/@kyoookosan/video/6883074502054432002"
[2] pry(main)> url.match(/(.*)(?=\/video)/).to_a.try(:first)
=> "https://www.tiktok.com/@kyoookosan"