![备选名称](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)
}