Skip to content

Instantly share code, notes, and snippets.

@vargheseraphy
Created April 13, 2015 09:12
Show Gist options
  • Save vargheseraphy/17dd287d17caae82ea11 to your computer and use it in GitHub Desktop.
Save vargheseraphy/17dd287d17caae82ea11 to your computer and use it in GitHub Desktop.
Ruby Regexp group matching, assign variables on 1 line

Ruby Regexp group matching,

You don't want scan for this, as it makes little sense. You can use String#match which will return a MatchData object, you can then call #captures to return an Array of captures. Something like this:

#!/usr/bin/env ruby

string = "RyanOnRails: This is a test"
one, two, three = string.match(/(^.*)(:)(.*)/i).captures

p one   #=> "RyanOnRails"
p two   #=> ":"
p three #=> " This is a test"
Be aware that if no match is found, String#match will return nil, so something like this might work better:

if match = string.match(/(^.*)(:)(.*)/i)
  one, two, three = match.captures
end

Although scan does make little sense for this. It does still do the job, you just need to flatten the returned Array first. one, two, three = string.scan(/(^.)(:)(.)/i).flatten

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment