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 クラスにもあります。