替换用户名末尾的几个字符串

Replacing few strings at the end of a user name

在 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') 我得到 namas = namau,而不是 namas = namu

猜测是由于 length - 1 只替换了最后一个字符串。

如何调整以替换最后一个字符串?

只用最后两个字符就可以了

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

请注意,w.length - 2 定位到倒数第二个字符,, 2 表示您需要两个字符,而不是一个。