精确字符串匹配文件名数组 JavaScript/Nodejs

Exact String Match FileName Array JavaScript/Nodejs

我目前有一个 findFile 函数,我在 forEach 循环中使用它来遍历文件名数组,然后为原始数组中的每个文件名提供一个新的文件系统路径数组:

var dir = 'Some File System Path';
const fs = require('fs');

const findFile = function (dir, pattern) {
    var results = [];
    fs.readdirSync(dir).forEach(function (dirInner) {
        dirInner = path.resolve(dir, dirInner);
        var stat = fs.statSync(dirInner);
        if (stat.isDirectory()) {
            results = results.concat(findFile(dirInner, pattern));
        }
        if (stat.isFile() && dirInner.endsWith(pattern)) {
            results.push(dirInner);
        }
    });
    return results;
};

var newFileArr = ['1.txt', 'file2.txt', 'file3.txt', 'file4.txt'] 

function fpArr(newFileArr) {
  const fpArray = [];
  newFileArr.forEach((file => {
      fpArray.push(findFile(dir, file).toString())
      //console.log(fpArray)
  }));
  
OutPut:

[
/some/file/path/file1.txt,
/some/file/path/1.txt,
/some/file/path/file2.txt,
/some/file/path/file3.txt,
/some/file/path/file4.txt
]

我面临的问题是我的 findFile 寻找模式匹配,它可能在搜索 "file1.txt" 时选择了“1.txt”的路径。我知道这是一个边缘案例,但它是一个重要的边缘案例,因为其他文件名可能以相同的字母或数字结尾,我不希望在文件路径数组输出中提取这些文件名。我已经尝试了几个想法,例如“.match()”和“.startsWith”,但据我所知,这些想法仅适用于字符串文字或正则表达式,这会导致搜索本身失败。我想看看是否有办法让 findFile 函数根据某个字符串值的变量进行精确匹配?感谢任何让我朝着正确方向前进的帮助。

[
  'K_01.00.0000.iar',
  'HELLOWORLDKLA_01.00.0000.iar',
  'HELLO_KLA_01.00.0000.iar',
  'KLA_01.22.7895.iar',
  'KLA_HELLO_WORLD_2_01.00.0000.iar',
  'KLA_02_WORLD_01.00.0000.iar'
]
[]

以上是我实际使用的 2 个数组。第一个数组只是一个简单的文件名数组。通过同步和您 async/await 解决方案,底部数组已 运行。由于某种原因,即使添加了 RegExp,它仍然会拾取 2 个未在文件名数组中列出的文件。我添加了文件路径以显示 none 的文件位于根目录中,并将文件分散到子目录中以确保递归搜索有效。我会继续弄乱它,看看我是否能弄清楚为什么 RegExp 解决方案在不应该将这些文件带入数组时....

恐怕我没有足够的声誉来发表评论,所以我发布了一个答案!

您的代码似乎可以正常工作,如果我理解正确的话,您希望根据目录和子目录查找列表中的所有文件,从而为您提供这些文件的路径。对吗?

当我 运行 你的代码时,它确实在 newFileArr 中提取了四个文件并排除了 1.txt,我创建了一个 codesandbox 演示来向你展示虚拟文件.

我还冒昧地创建了一个 codesandbox,它演示了如何使用 RegExp 和 map 在单个函数中执行此操作以创建动态正则表达式(如果有用的话)。