Go regex engine - RE2, а RE2 не поддерживает обходные пути .
На самом деле, вам не нужно заглядывать вперед: используйте шаблон с не жадными точками в начале, захватите его в группу 1 и используйте оставшуюся часть шаблона, как есть, для проверки правого контекста:
str := `my-name-host1.host2.host3.com:80`
re := regexp.MustCompile(`(.*?)-host1\.host2\.host3\.com:80`)
match := re.FindStringSubmatch(str)
fmt.Println(match[1])
Вывод: my-name
, см. Демоверсию Go .
Обратите внимание на использование функции FindStringSubmatch
, которая обеспечивает доступ к захваченным подстрокам.
Также см. Демонстрационную версию Go regex .