我正試圖通過降價文件,取代所有的圖像網址。縮減圖片url的格式是![alternative name](imageurl.png)
正則表達式在所有網址上的降價網址在golang
我的正則表達式搜索找到第一個,返回位置並替換它,然後遍歷文檔,直到我的正則表達式搜索找不到任何 - 即它的匹配維數組是空。
問題是由於某種原因,它繼續匹配「我不知道是什麼」。即數組的長度從正則表達式搜索返回的是永遠不爲0
這將返回一個持續:
length: 2
length: 0
length: 2
length: 0
length: 2
length: 0
length: 2
length: 0
length: 2
2的來自我設置索引0循環內的線indexes = bodyRe.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指向在那裏他們可以從被服務的地方
編輯:。固定
謝謝你們 由於事實,人們努力去理解什麼,我想做的事,我懷疑我正在以一種奇怪的方式解決這個問題,我已經開始工作了,下面是代碼片段,這個代碼片段適用於其他任何人查看這個代碼片段。
首先我會解釋爲什麼我有這個問題。 我想從網站本身的實際維護中分離出一個網站的博客寫作。因此,「博客作者」被告知以markdown編寫博客,所有圖片標籤的格式爲`所有圖片必須與降價文件本身位於同一目錄中。 因爲這個目錄不是網站本身的代碼庫的一部分,所以圖片網址需要用絕對網址替換,以便它們可以被投放。我不希望這是博客作者需要擔心的事情。
一切工作正常的第一個圖像,但因爲替換絕對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)
}
我沒有時間深入研究,但如果停止重新使用「索引」片,會發生什麼情況?我非常懷疑這個代碼。只需一眼就能看到一堆重新切片,因爲我必須停下來思考每行代碼之後的集合是什麼樣的,這可能是您的錯誤發生的地方。 – evanmcdonnal
是否可以根據樣本輸入和期望的輸出重新解決問題? –
Markdown圖像鏈接也可以指定一個標題:'![alt text](/ path/to/img.jpg「Title」)'那麼稍後'![alt text] [id]'完全有效的降價怎麼辦? '[id]:/path/to/img.jpg「Title」'?試圖用正則表達式解析事情通常是困難和容易出錯的。當然,Go中必須有一個markdown解析器。 –