2016-08-05 88 views
0

在我的text_area/text_field中,我想給用戶選項,以便在某些詞語中添加加粗。 它會像這樣:這裏面有一個** bold **字。Ruby on Rails。將** Bold **替換爲<b>加粗</b>用gsub()

我已經使用.gsub('**', '<b>').html_safe它幾乎可以工作,但問題是輸出不完全正確。

預期輸出:這裏面有一個加粗的字。

我得到了:這裏面有一個粗體字。

HTML:

<p>This has a <b>bold<b> word inside</b></b></p> 

我怎樣才能讓只有與**包圍的話得到<b> </b>

+0

提供更多的細節,'這有** **粗體字inside.'這是你的文本,你正在使用'gsub('**','')'所以它會變成'這裏面有一個
加粗的
字.',所以沒有關閉'
'它變成了'這有一個bold hgsongra

+0

裏面有一個問題,還有一個問題來自你收到這種'string'的位置? – hgsongra

+1

或者您可以使用pagedown編輯器。這是相同的編輯器,即使用stackoverflow和它的自由和開放源碼 – Tonza

回答

2

您可以捕獲匹配,並將其傳遞到下一個程序段

string = "This has a **bold** word inside" 

string.gsub(/\*\*(\w+)\*\*/) {"<b>#{$1}</b>"} 

#=> "This has a <b>bold</b> word inside" 

它適用於隨後的比賽以及

string = "This has a **bold** word inside **bold**" 

#=> "This has a <b>bold</b> word inside <b>bold</b>" 

編輯

如果你想捕捉空間以及添加\s的正則表達式

string = "This has a ** bold with spaces ** word inside **bold**" 

string.gsub(/\*\*([\w\s]+)\*\*/) { "<b>#{$1}</b>" } 

#=> "This has a <b> bold with spaces </b> word inside <b>bold</b>" 
+0

謝謝@Deepak這項工作很好,但唯一的問題是,如果我有空格內的句子,它不起作用,例如:**這是一個粗體文字**。任何修補程序? – Rubioli

+0

只需更換捕獲組並添加空間(/ \ * \ *([\ w \ s] +)\ * \ * /) –

+0

@ user6589814爲其添加了修復程序 –