我目前有一个在 forEach 循环中使用的 findFile 函数来迭代文件名数组,然后为原始数组中的每个文件名提供一个新的文件系统路径数组:
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 个数组。第一个数组只是一个简单的文件名数组。底部数组已通过同步和异步/等待解决方案运行。由于某种原因,即使添加了 RegExp,它仍然会拾取 2 个未在文件名数组中列出的文件。我添加了文件路径以显示根目录中没有任何文件,并将文件分散到子目录中以确保递归搜索正常工作。我会继续搞乱它,看看我是否能弄清楚为什么 RegExp 解决方案将这些文件带入数组,而它们不应该......
最佳答案
恐怕我没有足够的声誉来发表评论,所以我发布了一个答案!
您的代码似乎有效,如果我理解正确的话,您希望从目录和子目录的列表中查找所有文件,为您提供这些文件的路径。这是正确的吗?
当我运行你的代码时,它确实获取了 newFileArr 中的四个文件并排除了 1.txt,我创建了一个 codesandbox演示向您展示虚拟文件。
我还冒昧地创建了一个 codesandbox演示了如何使用 RegExp 和映射在单个函数中执行此操作以创建动态正则表达式(如果有用)。
关于javascript - 精确字符串匹配文件名数组 JavaScript/Nodejs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61010600/