回答:
モジュールのbasename
メソッドを使用しpath
ます。
path.basename('/foo/bar/baz/asdf/quux.html')
// returns
'quux.html'
ここでは、上記の例から取られているマニュアルです。
ファイル名のファイル名部分を取得するには、basenameメソッドを使用します。
var path = require("path");
var fileName = "C:\\Python27\\ArcGIS10.2\\python.exe";
var file = path.basename(fileName);
console.log(file); // 'python.exe'
拡張子なしのファイル名が必要な場合は、拡張子変数(拡張子名を含む)をbasenameメソッドに渡して、Nodeに拡張子なしの名前のみを返すように指示できます。
var path = require("path");
var fileName = "C:\\Python27\\ArcGIS10.2\\python.exe";
var extension = path.extname(fileName);
var file = path.basename(fileName,extension);
console.log(file); // 'python'
/
質問の例に示されているように、パスセパレーターが既にわかっている場合(つまり、特定のプラットフォーム/環境用に記述している場合)、それを単純なままにして、文字列をセパレーターで分割できます。
'/foo/bar/baz/asdf/quux.html'.split('/').pop()
それは正規表現で置き換えるよりも速く(そしてよりきれいなimoです)。
繰り返しますが、これは特定の環境向けに記述している場合にのみ行ってください。そうでない場合は、path
モジュールが使用されます。これは、パスが驚くほど複雑であるためです。Windowsの、例えば、サポート/
多くの場合が、ありません例えばのための\\?\?
共有ネットワークフォルダなどに使用するスタイルのプレフィックス。Windowsでは、上記の方法は遅かれ早かれ失敗する運命にあります。
NodeJSでは、__ filename.split(/ \ | //)。pop()は、OSプラットフォーム上の絶対ファイルパスからファイル名のみを返します。この正規表現のアプローチで正規表現のスキルを思い出すことができるのに、なぜAPIを記憶/インポートする必要があるのか。
Nodejsには、'__fileName'
実行中の現在のファイルを保持するデフォルトのグローバル変数が付属しています。 私のアドバイスは、__ fileNameを任意のファイルからサービスに渡して、fileNameの取得が動的になるようにすることです
以下では、fileName文字列を使用し、それをに基づいて分割していpath.sep
ます。path.sepは、posixファイルセパレーターおよびWindowsファイルセパレーターの問題を回避します(「/」および「\」の問題)。それははるかにきれいです。部分文字列を取得し、最後の区切られた名前のみを取得し、それを実際の長さで3減算すると、それ自体がわかります。
あなたはこのようなサービスを書くことができます(これはtypescriptにありますが、それはjsでうまく書くことができます)
export class AppLoggingConstants {
constructor(){
}
// Here make sure the fileName param is actually '__fileName'
getDefaultMedata(fileName: string, methodName: string) {
const appName = APP_NAME;
const actualFileName = fileName.substring(fileName.lastIndexOf(path.sep)+1, fileName.length - 3);
//const actualFileName = fileName;
return appName+ ' -- '+actualFileName;
}
}
export const AppLoggingConstantsInstance = new AppLoggingConstants();
path.basename(fpath, path.extname(fpath))