2014-10-11 82 views
0

我試圖用<a href="http://example.com">example.com</a>取代所有example.com實例替換字符串中的一個值:正則表達式在Ruby中

content.gsub(/example\.com/, '<a href="http://example.com">example.com</a>') 

但我並不想取代example.com如果有前一個句點,像在www.example.com。所以我的第一個想法是做正則表達式/[^\.]example.com/。但是,當然,gsub!也會替換example.com之前的字符。

有沒有一種簡單的方法來取代所有在前面沒有.example.com

回答

2

我會負回顧後做到這一點:

content.gsub(/((?<!\.)example.com)/i , '<a href="http://\1">\1</a>') 

,說(?<!\.)字面意思是「如果不是通過前面.」的一部分。

負向後視是零寬度斷言,因此它不是匹配的一部分,因此不會被替換。

注意,這些僅在紅寶石支持1.9+

此示例還捕獲域本身,以便它可以在替換使用,這使得它易於用可變交換出來,並我讓它不區分大小寫(通過以/i結束表達式),只是因爲它對我更有意義。

1

可以在gsub使用back reference

content.gsub(/(^|[^.])example\.com/, '\\1<a href="http://example.com">example.com</a>') 

(^|[^.])將匹配輸入或非點字符的開始。