Get substring after the first = symbol in Ruby

Purely out of curiosity, is there a more elegant way to simply get the substring after the first = symbol in a string? The following works to give back name=bob:

string = "option=name=bob"
string[string.index('=')+1..-1]

It just doesn't feel very Ruby. This also works:

string.split('=', 2)[1]

Again, not very elegant especially since split is doing extra unnecessary work. Are regular expressions the answer? I felt this was a little overkill for the simplicity of finding a single character position in a string:

string.match('=(.*)')[1]

I have to imagine this is an extremely common situation, isn't there a string.after('=') type method? Does Ruby on Rails provide something like this given the frequency this kind of operation is used over the web?

UPDATE: Forgot to mention the situation when the symbol is not found, nil or empty string should be returned. But the regular expression mechanism and .index method require an extra check for that (so less elegant).


Not exactly .after, but quite close to:

string.partition('=').last

http://www.ruby-doc.org/core-1.9.3/String.html#method-i-partition


There's also this way:

string.partition('=')[2]

And this one:

string.sub(/.*?=/, '')

I think I prefer the regexp way you mentioned, though.


Probably not the Ruby-way (it's a bit cryptic), but you could do this:

string[/=/]
$'
=> "name=bob"

or

/=/ =~ string
$'
=> "name=bob"

$' is a global holding the string after a successful match. It's nil if nothing is matched, too!


Use String#match

You can use a regular expression with positive lookbehind to find your match. For example:

string = "option=name=bob"
string.match /(?<==).*/
# => #<MatchData "name=bob">

Use Match Variables to Access Result

Even if you haven't assigned the match data to a variable, Ruby will store it in special match variables for you.

$&
# => "name=bob"

split(char) is another function which can be used. For instance, we want to get substring before char ':' from "answer:computer" then, we can use "answer:computer".split(':')[0].So, we would get result as "answer".