Я использую программное обеспечение для форума Discourse. Как и в текущем состоянии, Discourse представляет ссылки на тему двумя способами: с номером сообщения в конце и без него.
Пример:
forum.domain.com/t/some-topic/23
forum.domain.com/t/some-topic/23/5
Первый - это то, что я хочу, а второй я хочу, чтобы вообще не отображался на форуме.
Я написал пост об этом на форуме Discourse, но не получил ответа, какое регулярное выражение добавить в поле ввода для нормализации постоянной ссылки в разделе администратора.
Мне сказали, что есть возможность сделать это с помощью нормализации постоянной ссылки, например (это пример, показанный в админке под текстом ввода Regex, я его не писал):
permalink normalizations
Apply the following regex before matching permalinks,
for example: /(topic.)\?./\1 will strip query strings from topic routes.
Format is regex+string use \1 etc. to access captures
Я не знаю, какое регулярное выражение мне следует использовать, чтобы удалить числовое значение номера сообщения из ссылок. Мне это нужно только для тематических ссылок.
Это библиотека маршрутизации routes.rb, а это < библиотека href="https://github.com/discourse/discourse/blob/master/app/models/permalink.rb" rel="nofollow">permalink.rb (я думаю, что библиотека постоянных ссылок должна помочь лучше понять, как этого добиться). Я понятия не имею, как к этому подойти, потому что кажется, что мне нужны некоторые знания о маршрутизации Discourse, чтобы заставить его работать. Например, я не понимаю, почему (topic.)
является частью регулярного выражения, что это значит, поэтому их пример не помогает мне найти решение.
В админке у меня есть поле ввода, в которое мне нужно поместить код регулярного выражения нормализации.
Мне нужна помощь с Regex. Мне нужно, чтобы регулярное выражение работало со всеми темами.
Что я пробовал, но не получилось:
/(\/\d+)\/\d+$/\1
/(t/[^/]+/\d+).*/\1
/(\/\d+)\/[0-9]+$/\1
/(\/\d+)\/[0-9]+/\1
/(\/\d+)\/\d+$/\1/
/(forum.domain.com(\/\w+)*\/\d+)\/\d+(?=\s|$)/\1
Примечание. В поле ввода "Нормализация постоянной ссылки" символ |
используется как разделитель для разделения нескольких выражений Regex.
/(\/\d+)\/\d+$/\1
. Многое зависит от того, какие функции регулярных выражений поддерживает Discourse. Возможно, вам придется обойтись без$
и/или заменить каждый\d
на[0-9]
. - person trincot   schedule 09.07.2016^/(t/some-topic/\d+).*/\1
? Если регулярное выражение получает ввод строки как/t/some-topic/23
, когда у вас естьforum.domain.com/t/some-topic/23
, это может сработать. Вам действительно предложили/(topic.*)\?.*/\1
, звездочки утеряны из-за плохого форматирования. - person Wiktor Stribiżew   schedule 09.07.2016[^/]+
. Скажем, для сопоставления/t/this/45
и/t/that/65
можно использовать/t/[^/]+/\d+
. Чтобы использовать группы захвата, поместите(....)
вокруг части, которую нужно сохранить, и укажите это значение с помощью\
+цифры, которая соответствует порядку появления группы захвата. Итак, вы можете попробовать/(t/[^/]+/\d+).*/\1
или/^(/t/[^/]+/\d+).*/\1
(в зависимости от того, что означает/.../
в примере). - person Wiktor Stribiżew   schedule 09.07.2016$
, замена\d
...)? - person trincot   schedule 09.07.2016/
, поэтому не могли бы вы попробовать/(\/\d+)\/\d+$/\1/
с косой чертой в конце? - person trincot   schedule 09.07.2016ruby on rails
, так как дискурс, похоже, написан в нем, а также поместить эту ссылку на github в свой вопрос. Вам нужно привлечь к своему вопросу рубиновых программистов :) - person trincot   schedule 09.07.2016