我正在嘗試創建一個檢查多個條件的常規(ruby)表達式。我使用這個正則表達式來替換我的對象的內容。我的正則表達式接近完成,除了我在減價方面面臨的兩個問題。正則表達式Markdown標頭
首先,標題給我帶來麻煩。例如,如果「Hi」位於標題中,我不想將「Hi」替換爲「Hello」。
Hi John <== # should not change
==================
文字:嗨,你好嗎? < ==#應該是:你好,你好嗎?替換後
或者:
#### Hi Peter <== # should not change
文字:嗨,你好嗎? < ==#應該是:你好,你好嗎?替換後
問題:如何在我的正則表達式中轉義markdown標題?我已經嘗試了負面後視和前瞻斷言,但無濟於事。
我的第二個問題應該很容易,但不知何故我掙扎。如果單詞是斜體「hi」我想查找並替換它們,而不更改下劃線。我可以用這個正則表達式查找單詞:
\b[_]*hi[_]*\b
問題2:但是如果我將取代它,我也會改變下劃線。有沒有辦法只檢測單詞本身並將其替換,而仍然使用單詞邊界?
代碼示例
@website.autolinks.all.each do |autolink|
autolink.name #for example returns "Iphone5"
autolink.url #for example returns "http://www.apple.com"
regex = /\b(?<!##\s)(?<![\d.\[])([_]*)#{autolink.name}([_]*)(?![\d'"<\/a>])\b/
if @permalink.blog_entry.content.match(regex)
@permalink.blog_entry.content.gsub!(regex, "[#{autolink.name}](# {autolink.url})")
end
end
示例文本
Iphone5
==============
Iphone5的是最好的手機出現,即使人在三星可能會認爲,或許只希望他們三星Galaxy S3更好。
#### Samsung Galaxy S3?
是的,這就是最新的三星手機的名稱。
這將導致帶有HTML標籤的文本,但是當我使用我的正則表達式時,我的內容使用Markdown語法(在降級轉換器之前使用)。
是有什麼在頭可言,你想改變什麼? – VladL 2013-02-22 13:50:35
不,我只想用鏈接替換文字中的某些字詞。標題應保持不變。我嘗試添加(?<![^ ## + \ s])來跳過以「## +」開頭的行,但它不檢查字符組合。 – 2013-02-22 13:53:04
您是否將此文檔渲染爲HTML - 如果是這樣,那麼如何在HTML上查找和替換?您可以輕鬆地在所有段落元素上運行它,這將排除標題。 – 2013-02-22 14:51:10