2013-07-26 35 views
0

我有一個包含路徑的字符串,如是否可以使用正則表達式切斷字符串的開始?

/foo/bar/baz/hello/world/bla.html 

現在,我想從倒數第二個/得到的一切,即結果應該是

/world/bla.html 

這是可能使用正則表達式?如果是這樣,怎麼樣?

我現在的解決方案是將split這個字符串轉換成一個數組,然後再次加入它的最後兩個成員,但我確信有一個比這更好的解決方案。

+3

將它永遠是一個固定的 「最後兩個」?或者你總是會忽略「/ foo/bar/baz/hello」部分? –

+0

是使用Regex強制還是隻適用於Regex可以帶來的花哨? – dievardump

+2

'split'和'join'沒有錯,我不知道爲什麼人們總是需要一個正則表達式! – Ian

回答

1

我認爲這將工作:

var str = "/foo/bar/baz/hello/world/bla.html"; 
alert(str.replace(/^.*?(\/[^/]*(?:\/[^/]*)?)$/, "$1")); 

這將使有可能成爲唯一一個最後部分(比如,「富/條」)。

+0

你可以使用小提琴去除你的答案中的「我認爲」部分,不是嗎? – Renan

+0

@Renan我的確在我的控制檯嘗試過,我承認:) – Pointy

+0

您需要轉義所有*斜槓。與正常的元字符不同,正則表達式分隔符在出現在字符類中時不會失去其特殊含義。 –

3

例如:

> '/foo/bar/baz/hello/world/bla.html'.replace(/.*(\/.*\/.*)/, "$1") 
/world/bla.html 
1

可以使用/(\/[^\/]*){2}$/,其選擇兩次,接着由串的端部的斜線和一些內容。

看到這個regexplained

2
> '/foo/bar/baz/hello/world/bla.html'.match(/(?:\/[^/]+){2}$/)[0] 
"/world/bla.html" 

沒有正則表達式:

> var s = '/foo/bar/baz/hello/world/bla.html'; 
> s.substr(s.lastIndexOf('/', s.lastIndexOf('/')-1)) 
"/world/bla.html" 
3

你也可以做

str.split(/(?=\/)/g).slice(-2).join('') 
+0

不錯的單線! OP說他已經在使用'split'和'join'了,但我敢打賭他並沒有像這樣使用它們! –

相關問題