我在几个文件中有一堆markdown图像路径,我想更改根目录。图像标记的正则表达式是:
/\!\[image\]\((.*?)\)/
我需要能够抓取该组,解析出文件名并给它一个新路径,然后再将其返回gsub
进行替换。
例如,我想找到这样的所有字符串:
![image](/old/path/to/image1.png)
并将它们转换为:
![image](/new/path/to/image1.png)
我知道我可以在gsub
块中执行此操作,但我不太清楚它是如何工作的。
答案 0 :(得分: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 :(得分:0)
您可以使用具有正向lookbehind和正向前瞻的正则表达式来仅替换原始String中的文件名部分。我有一个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)"