Группа захвата регулярных выражений в Hugo

Недавно я хотел переключить свой генератор статических сайтов с Jekyll на Hugo. Мне очень нравится Hugo, но, к сожалению, использование некоторых функций меня часто раздражало.


рассмотрите код ниже,

{{ $my_var := `id = "demo"` }}
{{ $my_slice := (findRE `id=\"(.*)\"` $my_var 1) }}
{{ index $my_slice 0 }}

получить:

id = "demo"

ожидаемый результат

demo

В приведенном выше примере я хочу получить значение группы.

Обратите внимание, что на самом деле необходимо регулярное представление для получения группы, а не хитрое использование других функций (таких как replace для замены id = " пробелом или что-то в этом роде)

сайт тестирования регулярных выражений: https://regex101.com/

Пожалуйста, помогите мне, я действительно потратил много времени на поиск, но все еще ничего. Я нашел кого-то с таким же вопросом в Hugo-discourse, но прошел год, а ответа до сих пор нет.


5
576
2

Ответы:

Решено

Проще всего это сделать с помощью replaceRE, где $1 — номер вашей группы.

{{ $my_var := `id = "demo"` }}
{{ $result := replaceRE `id=\"(.*)\"` "$1" $my_var }}
{{ $result }} → "demo"

Спасибо @modInfo за вдохновение, решил расширить ответ replaceRE

по порядку

{{ $my_var := `id = "demo"` }}
{{ $result := replaceRE `id=\"(.*)\"` "$1" $my_var }}
{{ $result }} → "demo"

группа имен

{{ $my_var := `id = "demo2"` }}
{{ $result := replaceRE `id=\"(?P<my_id>.*)\"` "$my_id" $my_var }}
{{ $result }} → "demo2"

больше примеров

{{ $my_var := `<h2 id = "#demo+1-3%./2\"><a href = "https://www.google.com/"></a></h2>` }}
{{ $id := replaceRE `.*id=\"(?P<my_id>([:#a-z0-9+\-%./\\])*)\">(<a href=\"(?P<my_href>[:#a-z0-9+\-%./\\]*)\">.*)?` "$my_id" $my_var }}
{{ $id }}  → #demo+1-3%./2\
{{ $href := replaceRE `.*id=\"(?P<my_id>([:#a-z0-9+\-%./\\])*)\">(<a href=\"(?P<my_href>[:#a-z0-9+\-%./\\]*)\">.*)?` "$my_href" $my_var }}
{{ $href }}  → https://www.google.com/