1

我正在尝试为我的 rails 论坛创建一个 BBcode [code] 标签,但表达式有问题:

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”作为字符串传递给函数。

4

3 回答 3

3

您应该注意正则表达式的贪婪行为。所以正确的代码如下所示:

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
于 2010-01-19T14:32:18.080 回答
0

有人在这里发布了答案,但他们已将其删除。

我已经尝试了他们的建议,并进行了一些小改动。不管你是谁,谢谢!:)

这里是

param_string.gsub!( /\[code\](.*?)\[\/code\]/im ) {|s| '<pre>' + my_escape_function(s) + '</pre>' }
于 2010-01-02T16:19:28.410 回答
0

您可以简单地使用"<pre>#{$1}</pre>"您的重置价值。

于 2010-01-03T05:02:41.053 回答