2010-07-20 22 views
0

我的markdown實現將雙連字符轉換爲分隔符。例如,一個 - B成爲一個 - B將連字符轉換爲雙連字符的正則表達式

但有時用戶寫一個 - B時,他們的意思是一個 - B。我想要一個正則表達式來解決這個問題。

很明顯body.gsub(/ - /, " -- ")想到了,但這樣做會降低降價的無序列表 - 即如果一條線開始- list item,它將變爲-- list item。因此,解決方案必須只換出連字符時,有一個單詞字符某處左手

回答

1

可以匹配一個單詞字符連字符的左側,使用替換字符串中的逆向引用把它放回去:

body.gsub(/(\w) - /, '\1 -- ') 
+0

你還打了一個\ s?在那裏照顧有沒有空間: (\ w)\ s? - – 2010-07-20 01:58:07

1

也許,如果你想多一點接受...

gsub(/\b([ \t]+)-(?=[ \t]+)/, '\1--') 

\ b [\ t]強制通過一個單詞邊界條件的空白之前非whitepace。我不使用\ s來避免線路運行。我也只使用一個捕獲來保存前面的空格(Ruby 1.8.x有沒有?<=?)。

+0

這個正則表達式對yjerem的(簡單的)答案有什麼好處? – 2010-08-09 16:19:47

+0

@Horace它接受更多並保留輸入的空格(空格或製表符)。例如:「Hello \ t \ t- world!」將會變成「Hello \ t \ t--世界!」,這可能會或可能不合意。 – 2010-08-10 18:43:53

相關問題