正则表达式在Discourse论坛中标准化主题链接

时间:2016-07-09 16:02:16

标签: ruby-on-rails ruby regex discourse

我正在使用Discourse论坛软件。与目前的状态一样,Discourse以两种方式提供与主题的链接,最后有无邮编号。

示例:

forum.domain.com/t/some-topic/23
forum.domain.com/t/some-topic/23/5

第一个是我想要的,第二个我想不在论坛中显示。

我已在话语论坛上撰写a post about it,但没有收到Regex在管理部分的固定链接规范化输入字段中的答案。

我被告知有一个选项可以使用永久链接规范化这样做(这是在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路由库,这是permalink.rb库(我认为永久链接库应该有助于更好地了解如何实现此目的)。我不知道如何处理这个,因为我似乎需要一些Discourse路由的知识来使它工作。例如,我不明白为什么(topic.)是正则表达式的一部分,这是什么意思,所以他们的例子并没有帮助我找到解决方案。

在admin中我有一个输入字段,我需要在其中放置规范化正则表达式代码。

我需要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

注意:永久链接规范化输入字段将字符|视为分隔符,以分隔多个正则表达式。

3 个答案:

答案 0 :(得分:2)

我认为这可能是您要设置在de settings字段中的表达式:

/(t\/.*\/\d+)(\/\d+)/\1

你可以看到它working on Rubular

但是,the code that generates the url没有使用规范化代码,因此忽略了表达式。

您可以尝试规范化那里的固定链接:

def last_post_url
  url = "#{Discourse.base_uri}/t/#{slug}/#{id}/#{posts_count}"
  url = Permalink.normalize_url url
  url
end

答案 1 :(得分:0)

我并没有真正理解你的问题,但是如果我做对了,你说你想要最后的链接/某些数字,但不要与/ some-number /最后的一些数字。如果是这种情况,正则表达式是:

forum\.domain\.com\/t\/[^0-9\/]+\/\d{1,9}$

您可以替换'论坛'使用您的论坛名称和'域名'使用您的域名。

答案 2 :(得分:0)

这将删除另一个"/<digits>"之后的"/<digits>"跟踪:

/(forum.domain.com(\/\w+)*\/\d+)\/\d+(?=\s|$)/\1