package main import ( "math/rand" "regexp" "strings" "time" ) type ParsedLink struct { Name string PageName string } var random *rand.Rand func init() { random = rand.New(rand.NewSource(time.Now().UnixNano())) } const letterBytes = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" func RandStringBytes(n int) string { b := make([]byte, n) for i := range b { b[i] = letterBytes[rand.Intn(len(letterBytes))] } return string(b) } func ParseLinks(content string) ([]ParsedLink, error) { hrefRE := regexp.MustCompile(`#?\[\[\s*([\w.\- ]+)\s*\]\]`) links := hrefRE.FindAllStringSubmatch(content, -1) var result []ParsedLink for _, matches := range links { link := matches[0] if link[0] == '#' { link = strings.TrimPrefix(link, "#[[") } else { link = strings.TrimPrefix(link, "[[") } link = strings.TrimSuffix(link, "]]") link = strings.TrimSpace(link) l := strings.Replace(link, " ", "_", -1) result = append(result, ParsedLink{link, l}) } return result, nil }