2017-07-06 60 views

回答

4

在反應路由器v4中,您可以將您的正則表達式包含在()之內。所以這個正則表達式應該可以工作,並且匹配所有的路徑:​​。在您提供鏈接的Express路由器測試工具中,鍵值wo nt與此正則表達式一起顯示,但它確實有效,我在本地主機上進行了測試,並且按鍵工作得很好。

請注意,在第一個捕獲組後,我沒有使用?,即(/id/|/di/),因爲如果我這樣做了,那麼它將變爲可選,然後像/root/12這樣的路徑也會匹配。

+0

能否請您詳細說明如何工作的呢?我需要轉換此路徑「實體((/:contextId)(/:contextRelType)/活動(/:activeId)(/:activeRelType))」 –

+1

@SergeyOrlov ReactRouter v4使用path-to-regexp匹配路徑,您可以查看https://github.com/pillarjs/path-to-regexp#parameter-modifiers查看與之相關的示例。我的例子的目的是匹配原始問題中給出的所有情況。方括號'()'中的URL部分基本上是正則表達式,例如'/ hey(/ jerry |/tom)'將匹配'/ hey/tom'和'/ hey/jerry'這兩個路徑,而'?'在它使它可選之後。 – Zeus

0

這是我到底是怎麼做的,這是一個豆蔻有點可笑,但它的工作原理:

<Route 
    path="/root/:firstKey?/:firstId?/:secondKey?/:secondId?" 
    render={({ match: { params: { firstKey, secondKey, firstId, secondId } } }) => { 
     const params = { [firstKey]: firstId, [secondKey]: secondId } 
     return (<Whatever {...params} />) 
    }} 
    />