2012-12-31 89 views
0

我試圖刪除從C#創建一個路徑的文件名(使用使用Server.Mappath,它默認使用\\),如:替換Windows中的文件名「\」路徑

C:\\Foo\\Bar\\Baz\\file.js 

我現在的正則表達式看起來稍微工作在RegExr但在實際應用中它的工作原理正好相反方式:

\/[^\\]+$ 

我缺少什麼?

+1

嘗試正確標記問題。 – ocodo

回答

3

既然你在JS這樣做只是做一個String.split操作。

var path = "C:\\Foo\\Bar\\Baz\\file.js"; 
var separator = "\\"; 

function getFilenameFromPath(path, separator){ 
    var segmented = path.split(separator); 
    return segmented[segmented.length-1]; 
} 

console.log(getFilename(path, separator)); 

正則表達式的方法...

順便說一句,唯一錯了你原來的正則表達式是領先\和失蹤/

/[^\\]+$/ 

指甲會它。 (上@JDwyers尾隨/g答案是使它成爲一個全球性的比賽,這是 冗餘您的使用情況。)

所以......

path.match(/[^\\]+$/); // == "file.js" 

乾杯

+0

我可以這樣做,但我寧願尋找一個正則表達式。仍然正確的答案。 +1 –

+0

@JDwyers RegEx工作正常 - 綠色打勾他。 – ocodo

+0

@mike_hornbeck ^見上文。 – ocodo

0

你爲什麼使用正則表達式呢?這是矯枉過正的時候,提供了這樣做的Path類的函數:

string dirName = Path.GetDirectoryName(filename); 

也有在Path類相似的功能來提取文件名,擴展名,路徑根等

+0

,因爲我正在用phantomjs文件中的javascript刪除文件名,而且我不能在早期完成。 –

+3

你的意思是...你試圖刪除JavaScript中的文件名?如果是這樣,那麼這個問題應該被標記爲JavaScript,而不是c#。否則,我完全沒有跟着你。 –

3

跟上你的正則表達式:

var s = "C:\\Foo\\Bar\\Baz\\file.js"; 
var fileName = s.match(/[^​​​​​​\\]+$/​​​​​​​​​​​​g); 
+0

我的壞,JS控制檯borked;)它工作正常。 – ocodo

+0

請注意,'g'在這裏是多餘的,OP的原始正則表達式是正確的,除了前導'\'和丟失'/' – ocodo

1

既然你想要的目錄路徑,通過刪除文件名,從而:

var path = "C:\\Foo\\Bar\\Baz\\file.js"; 
var separator = "\\"; // make it OS agnostic. 
var result=""; 

function getFilename(path, separator){ 
    var segmented = path.split(separator); 
    for(var i=0; i<segmented.length-1;i++) 
    { 
     result+=segmented[i]+"\\\\"; 
    } 
    return result; 
} 
alert(getFilename(path, separator)); 
相關問題