2010-01-02 114 views
1

我試圖創建我的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」作爲字符串傳遞給函數。

+0

你試過雙引號(' 「\ 1」')? – 2010-01-02 16:00:41

+0

是的,也沒有工作。 – Marjan 2010-01-02 16:17:35

回答

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 
+0

正如你所看到的,這段代碼可以擴展爲支持每個BBcode標籤 – 2010-01-19 14:33:20

+0

這是一個很好的建議,應該加速很多事情。謝謝! – Marjan 2010-01-19 22:55:26

0

有人在這裏發佈了一個答案,但他們已經刪除它。

我已經嘗試過他們的建議,並且使它適用於一些小的改變。無論你是誰,謝謝! :)

param_string.gsub!(/\[code\](.*?)\[\/code\]/im) {|s| '<pre>' + my_escape_function(s) + '</pre>' } 
0

您可以簡單地使用"<pre>#{$1}</pre>"您的重置價值。