我正在尝试从 C# 中创建的路径中删除文件名(使用 Server.MapPath,默认情况下使用\\
),例如:
C:\\Foo\\Bar\\Baz\\file.js
我当前的正则表达式看起来在RegExr中有些工作,但在实际应用程序中它的工作方式正好相反:
\/[^\\]+$
我错过了什么?
我正在尝试从 C# 中创建的路径中删除文件名(使用 Server.MapPath,默认情况下使用\\
),例如:
C:\\Foo\\Bar\\Baz\\file.js
我当前的正则表达式看起来在RegExr中有些工作,但在实际应用程序中它的工作方式正好相反:
\/[^\\]+$
我错过了什么?
由于您在 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"
干杯
与您的正则表达式保持一致:
var s = "C:\\Foo\\Bar\\Baz\\file.js";
var fileName = s.match(/[^\\]+$/g);
由于您想要目录路径,因此通过删除文件名,因此:
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));
你为什么要为此使用正则表达式?当在类中提供了一个函数来执行此操作时,这是矫枉过正的Path
:
string dirName = Path.GetDirectoryName(filename);
Path 类中也有类似的函数来提取文件名、扩展名、路径根等。