我正在尝试从C#中创建的路径中删除文件名(使用Server.MapPath,默认情况下使用\\
),如:
C:\\Foo\\Bar\\Baz\\file.js
我目前的正则表达式在RegExr看起来有点工作,但在实际的应用程序中,它的工作原理恰恰相反:
\/[^\\]+$
我错过了什么?
答案 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唯一不对的是领先的和缺少的/
/[^\\]+$/
指甲吧。 (@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类中还有类似的函数来提取文件名,扩展名,路径根等。