2016-07-09 61 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之後中斷,使剩餘的正則表達式成爲一個新的文本 –