这是我第一次在 stack Overflow 上发布问题,但我会尽力解释它。我正在尝试将 .jpg 信息从服务器上的文件夹加载到数组中,每个图像都会加载到不同的位置。目前我只能获取 jpg 图像,但它们都转到 image[0]。如果可能的话,我正在尝试使用nodejs和fs来做到这一点。
代码是:
const fs = require("fs");
function getFolderFiles(path, extension) {
let files = fs.readdirSync(path);
return files.filter((file) =>
file.match(new RegExp(`.*\.(${extension})`, "ig"))
);
}
console.log(getFolderFiles("./broll", ".jpg"));
images = [getFolderFiles("./broll", ".jpg")];
console.log(images[0]);
目前已推出
[ 'image1.jpg', 'image2.jpg', 'image3.jpg' ]
[ 'image1.jpg', 'image2.jpg', 'image3.jpg' ]
我正在尝试获取 console.log (images[0]); to = image1.jpg 等等。
我的最终目标是返回如下所示的内容,但在弄清楚阵列设置后我将处理其他信息。
// var images = [
// {
// path: "./broll/image1.jpg",
// caption: captions,
// loop: imagelength,
// },
我一直在互联网上搜索,但找不到我理解的解决方案,因为我对编程相对较新。
首先,正则表达式的构造是错误的,因为当你将字符串传递给
RegExp
构造函数时,你必须转义\
才能使其显示在正则表达式中,即
new RegExp(`.*\\.(${extension})`, "ig")
但是如果你这样做,你会得到以下结果
RegExp
new RegExp(`.*\\..jpg`, "ig");
即,任意(可能为空)字符串(与
.*
匹配),后跟文字 .
(与 \\.
匹配),后跟任意字符(与 .
匹配),后跟文字 jpg
。而且您还缺少单词边界,即您的正则表达式也会匹配类似 foo.ajpg.bar
的内容
更好的方法是将正则表达式定义为
new RegExp(`.+\\.${extension}$`, "ig")
并且仅传递“jpg”(即不带点)作为扩展名。这将匹配长度至少为 1 (
.+
) 的任意字符串,后跟 .
(\\.
),后跟单词末尾的扩展名 (与 $
匹配)
第二,当你这样做时
images = [getFolderFiles("./broll", ".jpg")];
您正在创建一个新数组,结果
getFolderFiles
是该数组的第一个元素。但由于 getFolderFiles
的结果已经是一个数组,所以最终会得到以下结构
[["image0.jpg", "image1.jpg"]]
你可能只是想要
images = getFolderFiles("./broll", ".jpg");