[英]Make comma separated list from different paths
我在多行中有如下路徑列表。
abc/xyz/../a1.txt
abc/xyz/../a2.txt
abc/xyz/../a3.txt
abc1/xyz/../a4.txt
abc1/xyz/../a5.txt
abc1/xyz/../a6.txt
我想刪除所有路徑並僅提取文件名,如下所示
"a1.txt","a2.txt","a3.txt"
和
"a4.txt","a5.txt","a6.txt"
請幫助我。
假設路徑列表存儲在一個字符串中:
var paths= "abc/xyz/../a1.txt"
+ "\n" + "abc/xyz/../a2.txt"
+ "\n" + "abc/xyz/../a3.txt"
+ "\n" + "abc1/xyz/../a4.txt"
+ "\n" + "abc1/xyz/../a5.txt"
+ "\n" + "abc1/xyz/../a6.txt";
您只需要按行拆分並將每個條目減少到文件名(例如,使用正則表達式):
var fileNamePattern = /[^\/]+$/;
var fileNames = paths.split("\n").map(function (entry) {
return fileNamePattern.exec(entry)[0];
}
有關如何使用正則表達式的更多信息,請查看此鏈接, 在這里您可以找到如何使用 map 方法。
更新
在這里你可以找到一個例子
假設這是 string ,首先使用split
為字符串中的換行符在數組中存儲不同的路徑:
arr = str.split(/\n/);
然后遍歷數組並使用pop
將文件名存儲在另一個數組中(比如 file_names):
file_names.push(arr[i].split('/').pop())
您可以使用正則表達式將帶有路徑的多行字符串轉換為一個對象,該對象將具有每個文件夾的文件名數組,其中文件夾名稱用作對象的屬性名稱:
// Test data, with some border cases:
var paths = " abc/xyz/../a1.txt\n" +
"abc/xyz/../a2.txt\r\n" +
" \n" +
" no-folder.txt \n" +
"abc/xyz/../a3.txt \n" +
" abc1/xyz/../a4.txt\n" +
"abc1/xyz/../a5.txt\n" +
"abc1/xyz/../a6.txt\n" +
" ";
var filesPerFolder = paths.split(/\r\n|\n/).reduce(function (filesPerFolder, path) {
path = path.trim();
if (path.length) {
var folder = path.replace(/[^\/]*$/, '');
(filesPerFolder[folder] = filesPerFolder[folder] || []).
push(path.substr(folder.length));
}
return filesPerFolder;
}, {});
filesPerFolder
將是
{
"abc/xyz/../": [
"a1.txt",
"a2.txt",
"a3.txt"
],
"": [
"no-folder.txt"
],
"abc1/xyz/../": [
"a4.txt",
"a5.txt",
"a6.txt"
]
}
上面的代碼:
LF
或CRLF
換行符這是一個小提琴,您可以在其中鍵入列表作為輸入,按 Go 按鈕並查看Json
編碼的filesPerFolder
。
有很多方法可以處理該對象。 例如,您可以按如下方式打印內容:
Object.keys(filesPerFolder).forEach(function(folder) {
console.log('Contents of folder "' + folder + '": '
+ JSON.stringify(filesPerFolder[folder]));
});
這將輸出(使用上面的示例數據):
Contents of folder "abc/xyz/../": ["a1.txt","a2.txt","a3.txt"]
Contents of folder "": ["no-folder.txt"]
Contents of folder "abc1/xyz/../": ["a4.txt","a5.txt","a6.txt"]
或者,如果您想打印帶有前綴文件夾的每個文件(這將是輸入的干凈版本):
Object.keys(filesPerFolder).forEach(function(folder) {
filesPerFolder[folder].forEach(function(file) {
console.log(folder + file);
});
});
輸出:
abc/xyz/../a1.txt
abc/xyz/../a2.txt
abc/xyz/../a3.txt
no-folder.txt
abc1/xyz/../a4.txt
abc1/xyz/../a5.txt
abc1/xyz/../a6.txt
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.