2015-03-31 44 views
0

說我有一個像​​這樣的網址,我想選擇並返回/dir/.json之間的任何內容,在這種情況下爲name。所以,我想出了這樣的事情:使用正則表達式選擇url的特定部分

> var url = "/dir/name.json"; 
> var pattern = /\/\w+\./ 
> url.match(pattern) 
[ '/name.', index: 4, input: '/dir/name.json' ] 

,但我只是想匹配name,而不是/name.

當然還有另外一種方法,通過使用substr做到這一點:

> var url = "/dir/name.json"; 
> url.substr(5, url.length-10) 
'name' 

但我不知道我是否可以使用正則表達式

+1

'url.match(/dir\/(.*?)\./)[1]' – adeneo 2015-03-31 05:37:09

+1

可以使用'/ \/DIR \ /(\ w +)\。json /'並且名字將在第一個被捕獲的組中 – 2015-03-31 05:38:14

回答

2

假設點是判別式(所以它不能出現在目錄名稱中......)

x = (/\w+(?=\.)/).exec("/dir/name.json") 

可以做到這一點。

語法(?=...)描述了一個必須匹配但不被認爲是「消耗字符」的子表達式,因此整個正則表達式的含義是「一個非空的字符串後跟一個點(不考慮它的一部分的比賽)「。

技術名稱是「積極的先行零寬度斷言」。

如果點可能會出現在目錄名的東西,可以工作是:

x = (/\w+(?=\.\w*$)/).exec("/dir.1/dir.2/name.json") 

因爲超前,現在希望確保這些點後有隻字字符(如果有的話),然後字符串結束。

最後,如果一個分機號可以完全丟失:

x = (/\w+(?=\.\w*$|$)/).exec("/dir.1/dir.2/name.json") 

作品也爲"dir.1/dir.2/name"

2

嘗試這種情況:

alert("/dir/name.json".match(/\/(\w+)\./)[1]) 
 

 
alert("/dir/name.json".split("/").pop().split(".").shift())

相關問題