微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Node.js中使用glob直接获取*星号的匹配值

如何解决Node.js中使用glob直接获取*星号的匹配值

文件

  • /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']
}
  1. 有什么方法可以直接获取模式'*.pdf'中*(星号)的值的匹配数组? 编辑:正则表达式是匹配字符串的标准方式。但是,对于带有单个星号的模式,我可以直接获取匹配数组,例如:
['x','y','z']
  1. 在选项中使用 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 表达式本身是有根的/绝对的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。