1

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

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

我当前的正则表达式看起来在RegExr中有些工作,但在实际应用程序中它的工作方式正好相反:

\/[^\\]+$

我错过了什么?

4

4 回答 4

5

由于您在 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));

正则表达式方式...

顺便说一句,你原来的正则表达式唯一的问题是前面的 \ 和缺少的 /

 /[^\\]+$/

会钉它。(/g@JDwyers 答案的结尾是使其成为全局匹配,这对您的用例来说是多余的。)

所以...

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

干杯

于 2012-12-31T04:25:44.070 回答
3

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

var s = "C:\\Foo\\Bar\\Baz\\file.js";
var fileName = s.match(/[^​​​​​​\\]+$/​​​​​​​​​​​​g);
于 2012-12-31T04:23:46.503 回答
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));
于 2012-12-31T04:34:28.893 回答
0

你为什么要为此使用正则表达式?当在类中提供了一个函数来执行此操作时,这是矫枉过正的Path

string dirName = Path.GetDirectoryName(filename);

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

于 2012-12-31T04:15:23.797 回答