Замена нескольких строк в конце имени пользователя - PullRequest
0 голосов
/ 07 декабря 2018

Используя этот фрагмент кода в файле представления html.slim, измените окончание имени с e на ai, и оно отлично работает:

@provider_user.name.split.map {|w| (w.end_with?('e') ? (w.chomp(w[w.length - 1]) + 'ai') : w) }.join(" ")

Ииспользуя этот горох для нескольких вариантов:

@provider_user.name.split.map {|w| (w.end_with?('e') ? (w.chomp(w[w.length - 1]) + 'ai') : (w.end_with?('d') ? (w.chomp(w[w.length - 1]) + 'i') : (w.end_with?('as') ? (w.chomp(w[w.length - 1]) + 'u') : w))) }.join(" ")

Все хорошо, когда нужно изменить только последнюю строку, например name = namai, namd = nami.

Однако для (w.end_with?('as') ? (w.chomp(w[w.length - 1]) + 'u') iполучить namas = namau вместо namas = namu.

Полагаю, это связано с length - 1, который выполняет замену только последней строки.

Как ее можно изменить, чтобы заменить больше, чем последняястрока

1 Ответ

0 голосов
/ 07 декабря 2018

Просто пометьте последние два символа

w.end_with?('as') ? (w.chomp(w[w.length - 2, 2]) + 'u'

Обратите внимание, что w.length - 2 указывает на второй или последний символ, а , 2 означает, что вы хотите два символа, а не один.

...