Регулярное выражение для соответствия URL-пути - Golang с Gorilla Mux - PullRequest
0 голосов
/ 05 мая 2020

Я настраиваю конечную точку api, которая после анализа URL-адреса я бы получил путь, например /profile/<username>, например, /profile/markzuck

Имя пользователя не является обязательным, хотя эта конечная точка возвращает профиль аутентифицированного пользователя если имя пользователя пустое

Набор правил:
Я не лучший в регулярном выражении, но я создал выражение, которое требует /profile после этого, если есть следующий / например, /profile/ тогда вам нужно иметь <username>, который соответствует (\w){1,15}. Также я хочу, чтобы ему было разрешено сопоставлять любое количество комбинаций, если есть еще один следующий /, например, /profile/<username>/<if preceding "/" then anything else>

Хотя я не на 100% уверен, что мое выражение правильное, похоже, это работает в JavaScript
/^\/(profile)(\/(?=(\w){1,15}))?/

Gorilla Mux, хотя и отличается, и он требует, чтобы строка соответствия маршрута всегда начиналась с sla sh и некоторых других вещей, которые я не понимаю, например, он может использовать только не- группы захвата
(выяснилось, получив эту ошибку: pani c: route / {_ dummy: profile / ([a-zA-Z_])?} содержит группы захвата в своем регулярном выражении. Только группы, не предназначенные для захвата, принято: например (?: шаблон) вместо (шаблон))

Я попытался использовать то же выражение, которое использовал для JavaScript, которое здесь не сработало. Я создал более простое выражение handlerFunc("/{_dummy:profile\/[a-zA-Z_].*}"), которое действительно работает, но на самом деле оно не соответствует тому же набору правил, который я использую в своем выражении JavaScript.

Я смог придумать свое рабочее выражение из этого сообщения SO здесь
И в документации Gorilla Mux немного рассказывается о том, как работает их регулярное выражение, когда объясняется, как использовать пакет во вводном разделе здесь

Мой вопрос: какое выражение, похожее или эквивалентное описанному мной набору правил, будет работать в Gorilla Mux HandlerFunc()?

1 Ответ

2 голосов
/ 05 мая 2020

Если вы делаете это с мультиплексором, то я считаю, что вам нужно не регулярное выражение, а несколько путей.

В первом случае используйте путь "/ profile". Для одного, содержащего имя пользователя, используйте другой путь "/ profile / {userName}". Если вы действительно хотите использовать регулярное выражение, вы можете выполнить "/ profile / {username:}" для проверки имени пользователя. Если вам нужно обработать все, что идет после имени пользователя, либо зарегистрируйте отдельные пути (/ profile / {username} / otherstuff), либо зарегистрируйте pathPrefix «/ profile / {username} /» и обработайте оставшуюся часть URL-адреса вручную.

...