Javascript 从不同路径创建逗号分隔的列表

Javascript 从不同路径创建逗号分隔的列表,javascript,Javascript,我有多行路径列表,如下所示 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" 请帮助我。假设这是字符串,首先使用字符串中换行符的split在数组中存储不同的路径: arr

我有多行路径列表,如下所示

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"
请帮助我。

假设这是字符串,首先使用字符串中换行符的
split
在数组中存储不同的路径:

arr = str.split(/\n/);
然后在数组上循环并使用
pop
将文件名存储在另一个数组中(比如文件名):


假设路径列表存储在一个字符串中:

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";
您只需将其按行拆分,并将每个条目减少为文件名(例如,使用regex):

有关如何使用regex的更多信息,请查看此项,您可以找到如何使用map方法

更新


您可以找到一个示例

您可以使用正则表达式将具有路径的多行字符串转换为每个文件夹都有一个文件名数组的对象,其中文件夹名用作对象的属性名:

// 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;
}, {});
fileperfolder

{
    "abc/xyz/../": [
        "a1.txt",
        "a2.txt",
        "a3.txt"
    ],
    "": [
        "no-folder.txt"
    ],
    "abc1/xyz/../": [
        "a4.txt",
        "a5.txt",
        "a6.txt"
    ]
}
上述代码:

  • 识别
    LF
    CRLF
    换行符
  • 跳过路径周围的空白
  • 跳过空行
  • 可以处理文件名不带文件夹前缀的行
在这里,您可以键入列表作为输入,按下Go按钮并查看
Json
encoded
fileperfolder

有很多方法可以使用该对象。例如,您可以按如下方式打印内容:

Object.keys(filesPerFolder).forEach(function(folder) {
    console.log('Contents of folder "' + folder + '": '
        + JSON.stringify(filesPerFolder[folder]));
});
这将输出(带有上面的示例数据):

或者,如果要打印带有前缀文件夹的每个文件(这将是输入的干净版本):

输出:

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

这和angularjs有什么关系?你能做一把小提琴吗?我需要为相同的路径列出单独的列表。
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