2016-07-09 38 views
2

我正在使用Discourse论坛软件。就目前的状态而言,话语以两种方式提供了话题的链接,最后有和没有邮编。正则表达式在Discourse论坛正常化主题链接

例子:

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

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

我在Discourse论坛上写了a post about it,但没有收到回答正则表达式在管理部分中的永久链接规范化输入字段。

有人告诉我,有一个选项使用永久正常化像这样做(这是在正则表达式输入文字下的管理所示的例子中,我没有写它):

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.)是正则表达式的一部分,这是什么意思,所以他们的例子并不能帮助我找到解决方案。

在管理员我有一个输入字段,我需要把规范化正则表达式代码。

我需要帮助正则表达式。 我需要正则表达式来处理所有主题

事情我已经试过了没有工作出来:

/(\/\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 

注:的永久正常化输入字段将字符|作为分隔符的几个正则表达式表达之间的分离。

+0

不知话语或它的永久链接管理,但你想可能是'什么正则表达式/(\/\ d +)\/\ d + $/\ 1'。很大程度上取决于Discourse支持哪些正则表达式特征。您可能需要不使用'$'和/或用'[0-9]'替换每个'\ d'。 – trincot

+0

@trincot/t /表示话语中的话题,尽管我不知道他们放置的例子(话题)中的内容,可能与Discourse中的后向路由编码有关。 –

+0

也许'^ /(t/some-topic/\ d +)。*/\ 1'?如果当你有'forum.domain.com/t/some-topic/23'时,正则表达式得到字符串输入为'/ t/some-topic/23',这可能会起作用。您实际上已经建议'/(topic。*)\?。*/\ 1',星号因格式不当而丢失。 –

回答

2

我想这可能是你正在寻找把里面去设置字段中的表达式:

/(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 
0

我没有真正理解你的问题,但如果我说得对,你说的是你想在最后与/ some-number链接,但不要与/ some-number/some-number链接最后。如果是这样的话,正则表达式是:

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

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

+0

主题链接应该只在末尾有一个数字表示主题ID,但不能使用表示主题内帖子ID的第二个数字。我也需要Regex与Discourse兼容。他们举了一个例子(我在问题中提到)并告诉我遵循相同的规则。 –

0

这将删除陆续"/<digits>"尾随"/<digits>"

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

我试过了,话语仍然在末尾显示与帖子ID的链接(作为第二个数值)。也许是'话题'。意味着话语中的正则表达式,因为我不知道他们为什么使用话题。在他们的例子中,也许它是需要的。 –

+0

@IdanShechter现在尝试(假设Discourse支持向前看) – Bohemian

+0

它打破了输入字段中的正则表达式,可能是分隔不同正则表达式的字符。输入字段可以接受多个正则表达式,如果我复制粘贴你的正则表达式,它会在?= \ s之后中断,使剩余的正则表达式成为一个新的文本 –