2013-02-20 65 views
2

我目前正在處理一個奇怪的javascript正則表達式問題。我試圖匹配/或輸入結尾之間的所有字符。

[ 'admin', 'item', 'get' ] 

我真的不關心,如果/是匹配與否的一部分,所以這樣的結果會爲我工作了:比如這個字符串

admin/item/get 

爲亦宜

[ 'admin/', 'item/', 'get' ] 

來匹配輸入字符串s我使用正則表達式

s.match(/.+?[\/$]/g) 

導致

[ 'admin/', 'item/' ] 

據我瞭解輸入$的到底是不是在這個字符集匹配。

當我嘗試匹配使用正則表達式s.match(/.+?$/g)只輸入的結束我得到預期的結果[ 'admin/item/get' ]。但將$置於字符集s.match(/.+?$/g)中,匹配調用返回null

讚賞任何幫助...

順便說一句:我使用的node.js 0.8.20

+6

爲什麼不使用'split(「/」)'? – VisioN 2013-02-20 08:07:12

回答

4

因爲放置一個字符集裏,當$被視爲一個字符。這應該這樣做雖然,它使用非存儲器捕獲組內的交替,從而恢復的$含義是結束主題:

s.match(/.+?(?:\/|$)/g) 

["admin/", "bla/", "bla"] 

作爲評價提到:

s.split('/') 

["admin", "bla", "bla"] 
+0

斯普利特不是一種選擇,因爲上面的問題在某種程度上被降低了複雜性以專注於$問題。 – saintedlama 2013-02-20 10:57:42

+0

@Saintedlama我明白。這是否能解決您的問題? – 2013-02-20 12:03:00

+0

當然,它確實,接受,謝謝! – saintedlama 2013-02-20 15:26:04

1

字符類[]$沒有任何特殊含義,將被視爲文字字符

應該

.*?(?=\/|$) 

可以代替做this..you不必須檢查/$

[^/]* 
0

可以達到使用正則表達式或拆分方法的字符串對象的結果。

var s = "admin/item/get"; 

使用string對象的split方法。

拆分字符串"/"

s.split("/"); 

["admin", "item", "get"] 

使用正則表達式模式。

匹配正則表達式/[^\/]+/g的字符串,該字符串匹配除"/"字符以外的所有發生一次或多次的字符。

s.match(/[^\/]+/g) 

["admin", "item", "get"]