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

时间:2018-12-07 15:06:13

标签: ruby-on-rails string slim-lang

使用html.slim视图文件中的这段代码将名称的结尾从e更改为ai,它可以正常工作:

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

并将此pease用于多个选项:

@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仅替换了最后一个字符串。

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

1 个答案:

答案 0 :(得分:1)

仅需最后两个字符

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

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

相关问题