红宝石GSUB功能
我试图创建我的rails论坛上的BBcode [code]标签,和我有表达的问题:红宝石GSUB功能
param_string.gsub!(/\[code\](.*?)\[\/code\]/im, '<pre>\1</pre>')
如何获得正则表达式匹配的回报我们的(文字介于[code] [/ code]标签之间),并且转义所有的html和其他一些字符呢?
我已经试过这样:
param_string.gsub!(/\[code\](.*?)\[\/code\]/im, '<pre>' + my_escape_function('\1') + '</pre>')
,但没有奏效。它只是将“\ 1”作为字符串传递给函数。
您应该注意正则表达式的贪婪行为。所以,正确的代码如下所示:
html.gsub!(/\[(\S*?)\](.*?)\[\/\1\]/) { |m| escape_method($1, $2) }
的escape_method
则是这样的:
def escape_method(type, string)
case type.downcase
when 'code'
"<pre>#{string}</pre>"
when 'bold'
"<b>#{string}</b>"
else
string
end
end
正如你所看到的,这段代码可以扩展为支持每个BBcode标签 – 2010-01-19 14:33:20
这是一个很好的建议,应该加速很多事情。谢谢! – Marjan 2010-01-19 22:55:26
有人在这里发布了一个答案,但他们已经删除它。
我已经尝试过他们的建议,并且使它适用于一些小的改变。无论你是谁,谢谢! :)
这
param_string.gsub!(/\[code\](.*?)\[\/code\]/im) {|s| '<pre>' + my_escape_function(s) + '</pre>' }
您可以简单地使用"<pre>#{$1}</pre>"
您的重置价值。
你试过双引号(' “\ 1”')? – 2010-01-02 16:00:41
是的,也没有工作。 – Marjan 2010-01-02 16:17:35