用切片的值替换正则表达式匹配

我的目标是替换字符串中正则表达式的匹配项。我的代码:


func ReplaceBase64ToDecodedImage(data string) string {

imageSrc := make(chan []string)

go base64toPng(content, imageSrc)

result := <-imageSrc


fmt.Println("received string: ", result)

re := regexp.MustCompile(`data:image/png;base64,[^]+["']([^"']+)["']`)


s := re.ReplaceAllString(data, "slice replacement values")


return s

}

我正在通过通道将字符串片段流式传输到替换函数。在 Javascript 中,这可以使用 shift() 函数轻松完成:


const paragraph = 'This ??? is ??? and ???. Have you seen the ????';

const regex = /(\?\?\?)/g;

const replacements = ['cat', 'cool', 'happy', 'dog'];

const found = paragraph.replace(regex, () => replacements.shift());


console.log(found);

但我还没有在 go 中找到类似的东西,而且 ReplaceAllString() 不接受字符串片段。有没有办法在 golang 中实现这一点?我对 golang 很陌生,所以还不太了解它的功能。


倚天杖
浏览 163回答 2
2回答

吃鸡游戏

您可以通过 ReplaceAllStringFunc 方法执行此操作。使用它我们可以创建一个方法来遍历切片并返回每个值:import (&nbsp; &nbsp; "fmt"&nbsp; &nbsp; "regexp")func main() {&nbsp; &nbsp; paragraph := "This ??? is ??? and ???. Have you seen the ????"&nbsp; &nbsp; re := regexp.MustCompile(`(\?\?\?)`)&nbsp; &nbsp; replacements := []string{"cat", "cool", "happy", "dog"}&nbsp; &nbsp; count := 0&nbsp; &nbsp; replace := func(string) string {&nbsp; &nbsp; &nbsp; &nbsp; count++&nbsp; &nbsp; &nbsp; &nbsp; return replacements[count-1]&nbsp; &nbsp; }&nbsp; &nbsp; s := re.ReplaceAllStringFunc(paragraph, replace)&nbsp; &nbsp; fmt.Println(s)}

HUH函数

您可以使用ReplaceAllStringFunc上可用的功能*regexp.Regexp。要实现您在 JavaScript 中所做的类似功能,请执行以下操作:input := "This ??? is ??? and ???. Have you seen the ????"replacements := []string{"cat", "cl", "happyjaxvin", "dog"}r, _ := regexp.Compile(`\?\?\?`)res := r.ReplaceAllStringFunc(input, func(_ string) string {&nbsp; &nbsp; var repl string&nbsp; &nbsp; repl, replacements = replacements[0], replacements[1:]&nbsp; &nbsp; return repl})fmt.Println(res)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go