mirror of
https://github.com/langhuihui/monibuca.git
synced 2025-09-28 07:42:06 +08:00
61 lines
1023 B
Go
61 lines
1023 B
Go
package config
|
|
|
|
import (
|
|
"fmt"
|
|
"gopkg.in/yaml.v3"
|
|
"regexp"
|
|
"strings"
|
|
)
|
|
|
|
type Regexp struct {
|
|
*regexp.Regexp
|
|
}
|
|
|
|
func (r *Regexp) Valid() bool {
|
|
return r.Regexp != nil
|
|
}
|
|
|
|
func (r Regexp) String() string {
|
|
if !r.Valid() {
|
|
return ""
|
|
}
|
|
return r.Regexp.String()
|
|
}
|
|
|
|
func (r *Regexp) UnmarshalYAML(node *yaml.Node) error {
|
|
r.Regexp = regexp.MustCompile(node.Value)
|
|
return nil
|
|
}
|
|
|
|
func (r Regexp) MarshalYAML() (interface{}, error) {
|
|
return r.String(), nil
|
|
}
|
|
|
|
func (r Regexp) MarshalJSON() ([]byte, error) {
|
|
return []byte(`"` + r.String() + `"`), nil
|
|
}
|
|
|
|
func (r *Regexp) UnmarshalJSON(b []byte) error {
|
|
if len(b) == 0 {
|
|
return nil
|
|
}
|
|
if b[0] == '"' {
|
|
b = b[1:]
|
|
}
|
|
if b[len(b)-1] == '"' {
|
|
b = b[:len(b)-1]
|
|
}
|
|
r.Regexp = regexp.MustCompile(string(b))
|
|
return nil
|
|
}
|
|
|
|
func (r *Regexp) Replace(source, target string) string {
|
|
if group := r.FindStringSubmatch(source); group != nil {
|
|
for i, g := range group {
|
|
target = strings.ReplaceAll(target, fmt.Sprintf("$%d", i), g)
|
|
}
|
|
return target
|
|
}
|
|
return ""
|
|
}
|