在我的系统中,用户将注册他们的姓名。在系统使用的自然语言中,名称的结尾根据其用法而不同,例如:
"name surname"
"namai surnamai"
由于这个原因,我需要在某些地方更改@provider_user.name
的结尾;如果它以e
结尾,则将e
替换为ai
。
我的HTML苗条代码是:
= render partial: 'services/partials/messages/original_message', locals: { header: t('html.text.consultation_with.for_provider', name: @provider_user.name)
它从yml文件中提取文本并使用@provider_user.name
。
有什么建议可以解决吗?
答案 0 :(得分:3)
"name surname".gsub(/e\b/, 'ai') # "namai surnamai"
.gsub
使用正则表达式搜索并替换字符串。贪婪的.sub
版本意味着它将替换所有出现的内容。
\b
匹配任何单词边界。
答案 1 :(得分:1)
这真的很容易,这就是为什么我喜欢Ruby ...
class String
def replace_ends(replace, with)
end_array = self.split " "
end_array.map! do |var|
break unless var.end_with? replace
var.chomp(" ").chomp(replace) + with
end
return end_array.join " "
end
end
答案 2 :(得分:1)
尝试一下,简单的单行代码
@provider_user.name.split.map {|w| (w.end_with?('e') ? (w.chomp(w[w.length - 1]) + 'ai') : w) }.join(" ")
我敢肯定,它将"name surname"
转换为"namai surnamai"
。
在其他情况下...
@provider_user.name.split.map {|w| (w.end_with?('e') ? (w.chomp(w[w.length - 1]) + 'ai') : (w.end_with?('us') ? (w.chomp(w[w.length - 1]) + 'mi') : (w.end_with?('i') ? (w.chomp(w[w.length - 1]) + 'as') : w))) }.join(" ")