2 回答

TA貢獻1862條經驗 獲得超7個贊
我同意這些評論,你可能不想用正則表達式解析 HTML(壞事會發生)。
但是,讓我們假設它不是 HTML,并且您只想替換子匹配項。你可以這樣做
func UpdateText(input string) (string, error) {
re, err := regexp.Compile(`img.*?src=\"(.*?)\.(.*?)\"`)
if err != nil {
return "", err
}
indexes := re.FindAllStringSubmatchIndex(input, -1)
output := input
for _, match := range indexes {
imgStart := match[2]
imgEnd := match[3]
newImgName := strings.Replace(input[imgStart:imgEnd], "m", "a", -1)
output = output[:imgStart] + newImgName + input[imgEnd:]
}
return output, nil
}
(請注意,我稍微更改了您的正則表達式以分別匹配文件擴展名)

TA貢獻1789條經驗 獲得超8個贊
這是我使用 html 解析器的解決方案。
func UpdateAllResourcePath(text, prefix string) (string, error) {
doc, err := goquery.NewDocumentFromReader(strings.NewReader(text))
if err != nil {
return "", err
}
sel := doc.Find("img")
length := len(sel.Nodes)
for index := 0; index < length; index++ {
imgSrc, ok := sel.Eq(index).Attr("src")
if !ok {
continue
}
newImgSrc, err := UpdateResourcePath(imgSrc, prefix) // change the imgsrc here
if err != nil {
return "", err
}
sel.Eq(index).SetAttr("src", newImgSrc)
}
newtext, err := doc.Find("body").Html()
if err != nil {
return "", err
}
return newtext, nil
}
- 2 回答
- 0 關注
- 218 瀏覽
添加回答
舉報