Ответ 1
Не точно .after
, но довольно близко к:
string.partition('=').last
http://www.ruby-doc.org/core-1.9.3/String.html#method-i-partition
Чисто из любопытства, есть ли более элегантный способ просто получить подстроку после первого символа =
в строке? Следующие действия возвращают name=bob
:
string = "option=name=bob"
string[string.index('=')+1..-1]
Он просто не очень похож на Ruby. Это также работает:
string.split('=', 2)[1]
Опять же, не очень элегантно, потому что split
делает лишнюю ненужную работу. Отвечают ли регулярные выражения? Я чувствовал, что это немного переборщило для простоты нахождения единственной позиции символа в строке:
string.match('=(.*)')[1]
Я должен представить, что это чрезвычайно распространенная ситуация, не существует ли метод типа string.after('=')
? Предоставляет ли Ruby on Rails что-то подобное, учитывая частоту, которую этот вид работы используется в Интернете?
ОБНОВЛЕНИЕ: забыл упомянуть ситуацию, когда символ не найден, nil
или пустая строка должна быть возвращена. Но механизм регулярного выражения и метод .index
требуют дополнительной проверки для этого (поэтому менее элегантного).
Не точно .after
, но довольно близко к:
string.partition('=').last
http://www.ruby-doc.org/core-1.9.3/String.html#method-i-partition
Также так:
string.partition('=')[2]
И этот:
string.sub(/.*?=/, '')
Я думаю, что предпочитаю регулярное выражение, о котором вы говорили.
Вероятно, не Ruby-way (это немного загадочно), но вы можете сделать это:
string[/=/]
$'
=> "name=bob"
или
/=/ =~ string
$'
=> "name=bob"
$'
является глобальным, удерживающим строку после успешным совпадением. Он nil
, если ничего не сопоставляется!
Вы можете использовать регулярное выражение с положительным lookbehind, чтобы найти совпадение. Например:
string = "option=name=bob"
string.match /(?<==).*/
# => #<MatchData "name=bob">
Даже если вы не присвоили данные сопоставления переменной, Ruby сохранит ее в специальном сопоставлении переменных для вас.
$&
# => "name=bob"