Подтвердить что ты не робот

Получить подстроку после символа first = в Ruby

Чисто из любопытства, есть ли более элегантный способ просто получить подстроку после первого символа = в строке? Следующие действия возвращают 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 требуют дополнительной проверки для этого (поэтому менее элегантного).

4b9b3361

Ответ 2

Также так:

string.partition('=')[2]

И этот:

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

Я думаю, что предпочитаю регулярное выражение, о котором вы говорили.

Ответ 3

Вероятно, не Ruby-way (это немного загадочно), но вы можете сделать это:

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

или

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

$' является глобальным, удерживающим строку после успешным совпадением. Он nil, если ничего не сопоставляется!

Ответ 4

Использовать совпадение строк

Вы можете использовать регулярное выражение с положительным lookbehind, чтобы найти совпадение. Например:

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

Использовать совпадающие переменные для получения результата

Даже если вы не присвоили данные сопоставления переменной, Ruby сохранит ее в специальном сопоставлении переменных для вас.

$&
# => "name=bob"