2014-03-18 58 views
0

我在幾個文件中有一堆markdown圖像路徑,我想更改根目錄。對於圖像標籤的正則表達式是這樣的:如何使用gsub在Ruby中進行提取和替換?

/\!\[image\]\((.*?)\)/ 

我需要能夠搶到組,解析出文件名並返回給gsub被替換下場之前給它一個新的路徑。

舉例來說,我想找到這樣的所有字符串:

![image](/old/path/to/image1.png) 

並將其轉換爲:

![image](/new/path/to/image1.png) 

我知道我可以在gsub塊做到這一點,我只是不太清楚它是如何工作的。

回答

2

這裏有一種方法,冗長爲了清晰起見:

markdown = "![image](/old/path/to/image1.png)" 
regex = /(\w+.png)/ 
match_data = regex.match markdown 

p base_name = match_data[1] 
#=> "image1.png" 

p new_markdown = "![image](/new/path/to/#{base_name})" 
#=> "![image](/new/path/to/image1.png)" 

更簡潔:

p markdown.gsub(/\/.+(\w+.png)/, "/new/path/to/#{$1}") 
#=> "![image](/new/path/to/image1.png)" 
+1

在你回答之前,我確實得到了一個答案,但你的答案是最接近的。我的最終答案是'''text.gsub(/ \!\ [image \] \((。*?)\)/){「![#$ 1](/ new/path /#$ 1) ' – onetwopunch

0

您可以使用正回顧後,積極前瞻正則表達式替換隻在文件名部分原始字符串。我有一個new_path變量持有新路徑,並簡單地使用.sub來替代該變量。

img = "![image](/old/path/to/image1.png)" 
new_path = '/new/path/to/image1.png' 
p img.sub(/(?<=!\[image\]\()[^)]+(?=\))/, new_path) 
# => "![image](/new/path/to/image1.png)" 
相關問題