Ruby on Rails

Regexes with multiple slashes in Ruby


1 minute read

I picked up a new tip yesterday while working with regexes in Ruby. I was testing if a string begins with http:// or https:// and wrote a small regex.

/^https?:\/\//

Broken down, this ensures the string:

  1. Starts with http
  2. The next character is optionally s
  3. The next characters are ://

Even for such a simple regex that feels a bit hard for me to read. There are too many escaped slashes for my taste.

To improve this a bit you can use r%{} over /.../. The syntax works the same but you don’t need to escape slashes.

The regex becomes something much more readable:

%r{^https?://}

GitHub’s RuboCop styleguide has a recommendation on when to use this syntax.

Use %r only for regular expressions matching more than one / character. - RubuCop Ruby Style Guide

P.S. I could have probably just used two #starts_with? calls but where’s the fun in that?

Turn HTML + CSS into a web app. Remake is an open-source framework for indie hackers and solo devs who are tired of coding and just want to ship products fast. You control the design, Remake handles the rest.
Sponsor

Testing, Turbo Native, and exclusive content. Sign up for my monthly newsletter.