我正在为我的rails应用程序编写帮助程序,它应该用字符串进行一些操作,当我找到它时。如果我在转义后完全使用gsub
方法,那么这段代码就不会像我想的那样工作(它找不到数字999)。
require 'active_support/core_ext/string'
text = ">999"
text = ERB::Util.html_escape(text)
# text = text.downcase
text.gsub!(/\>\;(\d+)/) { "found [#{$1}]" }
puts text
在另一种情况下,如果我取消注释text = text.downcase
,即将任何方法应用于字符串,那么一切正常。那么,如果我想在gsub
方法之后使用html_escape
,我该怎么办?
答案 0 :(得分:3)
你正在打出一个很棒的功能;试试这个:
# ...as before.
text = ERB::Util.html_escape(text)
puts text.class
text
实际上是ActiveSupport::SafeBuffer
的一个实例,它可能实现了gsub!
方法,占用了一个块,但却得到了一些错误 - 因为它不会导致$1
1}}被设置。
您可以通过以下方式解决此问题:
text = text.to_s.gsub!(...)
text = text.gsub!(...) {|match| "found [#{match}]" }
您可能会发现在ActiveSupport代码的更高版本中修复了此不一致性,但您现在也可以将错误报告归档; gsub!
行为已有详细记录,应予以保留。