![备选名称](imageurl.png)
我的正则表达式搜索找到第一个,返回位置,然后替换它,然后循环浏览文档,直到我的正则表达式搜索没有找到任何匹配维度,即其匹配维度数组为空。
问题在于,出于某种原因,它继续与“我不知道到底是什么”相匹配。也就是说,从正则表达式搜索返回的数组长度永远不为0
location := split[:locationSplit]
bodyRe := regexp.MustCompile(`!\[(.*)\]\((.*)\)`)
indexes := bodyRe.FindStringIndex(body)
fmt.Println("location: ", absoluteFileLocation)
fmt.Println("length: ", indexes)
for len(indexes) != 0 {
fmt.Println("length: ", len(indexes))
imageLocation := body[indexes[0]:indexes[1]]
body = body[:indexes[0]] + imageLocation + body[indexes[1]:]
indexes = indexes[:0]
fmt.Println("length: ", len(indexes))
indexes = bodyRe.FindStringIndex(body)
}
这将返回一个连续的:
length: 2
length: 0
length: 2
length: 0
length: 2
length: 0
length: 2
length: 0
length: 2
index=body Re行。FindStringIndex(body)
帮助赞赏
所以我尝试了这个技巧:
(降价文件示例)
some markdown
![image](anImage.png)
more markdown
![image2](anImage2.png)
more markdown & end of document
修订后的守则:
...
...
bodyRe := regexp.MustCompile(`!\[(.*)\]\((.*)\)`)
indexes := bodyRe.FindAllStringSubmatchIndex(body, -1)
for _, j := range(indexes) { //i is the index, j is the element (in this case j = []int )
imageLocation := body[j[4]:j[5]]
body = body[:j[4]] + "/App/Image/?image=" + location + "/" + imageLocation + body[j[5]:]
}
return body
(所需的输出标记)
some markdown
![image](/App/Image/?image=[location]/anImage.png)
more markdown
![image2](/App/Image/?image=[location]/anImage2.png)
more markdown
end of document
body[j[4]:j[5]]
我需要这样做,当标记最终呈现时,图像URL指向可以提供服务的地方。
谢谢伙计们。由于人们很难理解我想做什么,我怀疑我正在以一种奇怪的方式解决这个问题。我已经让它工作,下面是代码片段,适用于任何其他人研究这个。
首先,我会解释为什么我会有这个问题。我想把为一个网站写博客与网站本身的实际维护分开。因此,“博客作者”被要求以降价方式写博客,所有图像标签的格式为“所有图像必须与降价文件本身位于同一目录中”。因为这个目录不是网站本身的代码库的一部分,所以图像URL需要替换为绝对URL,这样才能提供服务。我不希望这成为博客作者需要担心的事情。
对于第一张图片,一切都很好,但由于替换的绝对URL改变了长度,因此博客内容中所有字符的位置也发生了变化,正则表达式找到的索引不再对齐,因此我必须将新的长度添加到匹配的索引中。
adjustment := 0
for _, j := range(indexes) {
imageLocation := body[j[4]+adjustment:j[5]+adjustment]
replacement := "?imageurl=" + url.QueryEscape(location) + "/" + imageLocation
body = body[:j[4] + adjustment] + replacement + body[j[5] + adjustment:]
adjustment += len(replacement) - len(imageLocation)
}