问题描述
- /dir/w.txt
- /dir/x.pdf
- /dir/y.pdf
- /dir/z.pdf
const glob = require('glob');
const pattern = '*.pdf';
const options = {
cwd: '/dir/'
}
glob(pattern,options,(err,matches) => {
// matches => ['x.pdf','y.pdf','z.pdf']
}
['x','y','z']
- 在选项中使用 CWD 是否加速匹配? 就像,我可以简单地这样做
const pattern = '/dir/*.pdf';
glob(pattern,matches) => {
// matches => ['/dir/x.pdf','/dir/y.pdf','/dir/z.pdf']
}
解决方法
您可以map将匹配数组转换为删除扩展名并获取顶级名称的新数组:
const pattern = '/dir/*.pdf';
glob(pattern,(err,matches) => {
matches = matches.map((match) => {
// this regex gets the name of the pdf file.
return match.match(/[^/]+(?=\.pdf)/i)[0];
});
// matches => ['x','y','z']
}
cwd
选项是:
要搜索的当前工作目录。默认为 process.cwd()
。
在您的情况下,提供 CWD 可能会加快匹配速度,因为程序可能不必搜索尽可能多的文件夹来找到您的匹配项。
,嗯……Node.js 没有任何用于通配符的内置功能。这需要你自己动手,或者从 NPM 中引入 [众多] glob 包中的一个。而且你不会说什么你正在使用 glob 包。
我假设它是 glob
。
将搜索树的根指定为当前工作目录 (cwd
) 的原因是返回的匹配路径相对于当前工作目录,因此您注意到:
glob('*.pdf',{cwd:'/dir/'},cb)
将 ['a.pdf','b.pdf','c.pdf',...]
交给回调,同时使您的 glob 表达式成为绝对路径
glob('/dir/*.pdf',cb)
处理回调绝对路径 ['/dir/a.pdf','/dir/b.pdf','/dir/c.pdf',... ]
。
它并没有让它变得更快。这对调用者来说只是一种方便,取决于他们需要多少路径信息。
请注意,您可以很容易地说:
glob('/dir/*.pdf',{cwd:'/path/to/something/'},cb)
并且您将获得相同的 ['/dir/a.pdf',... ]
传递给回调,因为您的 glob 表达式本身是有根的/绝对的。