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 に答える