用切片的值替换正则表达式匹配
Replace regular expression matches with values of a slice
我的目标是替换字符串中正则表达式的匹配项。我的代码:
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 的新手,所以还不太了解它的功能。
您可以使用 *regexp.Regexp
上可用的 ReplaceAllStringFunc
功能。要像这样实现您在 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 {
var repl string
repl, replacements = replacements[0], replacements[1:]
return repl
})
fmt.Println(res)
您可以通过 ReplaceAllStringFunc 方法执行此操作。使用这个我们可以创建一个方法来遍历切片和 return 每个值:
import (
"fmt"
"regexp"
)
func main() {
paragraph := "This ??? is ??? and ???. Have you seen the ????"
re := regexp.MustCompile(`(\?\?\?)`)
replacements := []string{"cat", "cool", "happy", "dog"}
count := 0
replace := func(string) string {
count++
return replacements[count-1]
}
s := re.ReplaceAllStringFunc(paragraph, replace)
fmt.Println(s)
}
我的目标是替换字符串中正则表达式的匹配项。我的代码:
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 的新手,所以还不太了解它的功能。
您可以使用 *regexp.Regexp
上可用的 ReplaceAllStringFunc
功能。要像这样实现您在 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 {
var repl string
repl, replacements = replacements[0], replacements[1:]
return repl
})
fmt.Println(res)
您可以通过 ReplaceAllStringFunc 方法执行此操作。使用这个我们可以创建一个方法来遍历切片和 return 每个值:
import (
"fmt"
"regexp"
)
func main() {
paragraph := "This ??? is ??? and ???. Have you seen the ????"
re := regexp.MustCompile(`(\?\?\?)`)
replacements := []string{"cat", "cool", "happy", "dog"}
count := 0
replace := func(string) string {
count++
return replacements[count-1]
}
s := re.ReplaceAllStringFunc(paragraph, replace)
fmt.Println(s)
}