Regexes with multiple slashes in Ruby

Joe Masilotti - Nov 19 '20 - - Dev Community

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?

. . . . . . . . . .
Terabox Video Player