2012-07-31 63 views
0

正則表達式(從PHP移植到JavaScript中,Node.js的)應用於此字符串:的Javascript正則表達式的preg_replace

/users/:uid/posts/:pid 
/users/:uid 
/messages/:mid 

琴絃之上,包含參數( 「:」 後符號),直到下一個斜槓,我用一個字符串正則表達式替換它們。最終它應該是這樣的:

/users/([a-zA-Z0-9\-\_]+)/posts/([a-zA-Z0-9\-\_]+) 

因此,路由中的所有參數都應該用正則表達式字符串替換。我用下面的代碼來達到這個目的:

var fixedRoute = route[url].replace(/\\\:[a-zA-Z0-9\_\-]+/, '([a-zA-Z0-9\-\_]+)'); 

輸出是一樣的,字符串沒有被替換。任何人都可以用這個正則表達式來幫助我嗎?

非常感謝

+0

怎麼樣/消息/:中? – GitaarLAB 2012-07-31 00:21:16

+0

/messages /:mid應該成爲:/ messages /([a-zA-Z0-9 \ - \ _] +) – onlineracoon 2012-07-31 00:23:41

+0

route [url]的內容是什麼? – GitaarLAB 2012-07-31 00:24:11

回答

1

你忘了capturing group和它的反向引用。所以這會變成'hihi-foobar'.replace(/ foo(bar)/ i,$ 1)這樣的東西。
會呈現'hihi-bar'。

UPDATE(基於上述評論):

.replace(/:[upm]id/ig, ([a-zA-Z0-9\-\_]+)); 
+0

我曾嘗試使用/ g作爲全局修飾符,但它不起作用......還有什麼可能導致此問題? – onlineracoon 2012-07-31 00:11:47

+0

我說的是捕捉組,不是/ g(lobal)... – GitaarLAB 2012-07-31 00:20:23

+0

我不明白捕捉組/回參考。 – onlineracoon 2012-07-31 00:24:29