替换Windows'\\'路径中的文件名

时间:2012-12-31 04:10:24

标签: javascript regex replace

我正在尝试从C#中创建的路径中删除文件名(使用Server.MapPath,默认情况下使用\\),如:

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

我目前的正则表达式在RegExr看起来有点工作,但在实际的应用程序中,它的工作原理恰恰相反:

\/[^\\]+$

我错过了什么?

4 个答案:

答案 0 :(得分:3)

与你的正则表达式保持一致:

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

答案 1 :(得分: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));

RegEx方式......

顺便说一句,你原来的RegEx唯一不对的是领先的和缺少的/

 /[^\\]+$/

指甲吧。 (@JDwyers答案的尾随/g是使它成为一个全局匹配,就是这样 多余的用例。)

因此...

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

干杯

答案 2 :(得分: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));

答案 3 :(得分:0)

为什么要使用正则表达式?如果在Path类中提供了一个函数,那就太过分了:

string dirName = Path.GetDirectoryName(filename);

Path类中还有类似的函数来提取文件名,扩展名,路径根等。