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).
In Ruby, we can use the built-in chr method to access the first character of a string. Similarly, we can also use the subscript syntax [0] to get the first character of a string. The above syntax extracts the character from the index position 0 .
There is no substring method in Ruby, and hence we rely upon ranges and expressions. If we want to use the range, we have to use periods between the starting and ending index of the substring to get a new substring from the main string.
Removing the first character To remove the first character of a string in Ruby, we can use the built-in slice!() method by passing a character index.
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!
You can use a regular expression with positive lookbehind to find your match. For example:
string = "option=name=bob"
string.match /(?<==).*/
# => #<MatchData "name=bob">
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".
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With