loading...
Cover image for Regexes with multiple slashes in Ruby

Regexes with multiple slashes in Ruby

joemasilotti profile image Joe Masilotti Originally published at masilotti.com ・1 min read

I picked up a new tip yesterday while working with regexes in Ruby.

tl;dr - Use %r{} over /.../ when matching regexes with more than one /.

I was testing if a string begins with http:// or https:// and wrote a small regex.

/^https?:\/\//
Enter fullscreen mode Exit fullscreen mode

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?://}
Enter fullscreen mode Exit fullscreen mode

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?

Discussion

pic
Editor guide
Collapse
bizzibody profile image
Ian bradbury

Awesome. I did not know this. Thanks.

Collapse
joemasilotti profile image
Joe Masilotti Author

Glad to hear it, Ian!