转义字符串特殊字符,用于golang正则表达式

I have an array of characters like this :

chars := []string{".", "-", "(", ")"}

When I join them in regular way (strings.Join(chars, "")) and pass it to regexp.MustCompile, Its panic :

panic: regexp: Compile(`[.-()]`): error parsing regexp: invalid character class range: `.-(`

How can I scape string special characters for use in golang regexp as a character not regexp operator?

You must put the - item at the start/end of the array so that - appears either at the start - [-.()] - or end - [.()-] - of the character class.

Or escape the - in the chars array: "\\-".

NOTE: That is not the only caveat, the ^ and ] must also be escaped, or placed in a specific location in the character class. The \ must be escaped always.

See a Go demo:

package main

import (
    "fmt"
    "strings"
    "regexp"
)

func main() {
    chars := []string{"]", "^", "\\\\", "[", ".", "(", ")", "-"}
    r := strings.Join(chars, "")
    s := "[Some]-\\(string)^."
    re := regexp.MustCompile("[" + r + "]+")
    s = re.ReplaceAllString(s, "")
    fmt.Println(s)
}

Output: Somestring

Note that the ^ must not be the first item, ] must be at the start and - at the end.