Node.js中如何使用glob匹配多模式?单个搜索串可包含多模式吗?
在Node.js的glob工具中匹配多个模式的方法
嘿,这个问题我太熟了!在Node.js的glob工具里,要匹配多个模式其实有两种非常实用的方式,我给你详细拆解一下:
1. 直接传入模式数组
这是最直观也最推荐的方式,尤其当你的多个模式差异比较大的时候。你只需要把每个模式放进一个数组里,传给glob函数就行,它会自动合并所有匹配结果,还会帮你去重,不用担心同一个文件被多次返回。
举个代码例子:
const glob = require('glob'); // 匹配所有含abc的pdf文件,以及所有含xyz的pdf文件 glob(['*abc*.pdf', '*xyz*.pdf'], (err, files) => { if (err) throw err; console.log('找到的文件:', files); });
2. 在单个搜索字符串中包含多个模式
如果你想把多个模式塞进单个搜索字符串里,glob支持两种语法特性来实现:
方式一:大括号扩展(Brace Expansion)
这是bash风格的语法,用大括号把多个子模式括起来,逗号分隔就行。这种方式适合模式结构相似的场景,写起来非常简洁。
例子如下:
const glob = require('glob'); // 等价于同时匹配*abc*.pdf和*xyz*.pdf glob('*{abc,xyz}*.pdf', (err, files) => { if (err) throw err; console.log('找到的文件:', files); });
方式二:扩展模式(Extglob)
如果你的模式组合更复杂,可以用extglob语法,不过需要手动开启glob的extglob选项。这种方式用|来分隔不同的模式,外面用圆括号包裹(根据需要搭配@等修饰符)。
举个例子:
const glob = require('glob'); // 用|分隔两个模式,开启extglob选项 glob('*abc*.pdf|*xyz*.pdf', { extglob: true }, (err, files) => { if (err) throw err; console.log('找到的文件:', files); });
或者针对模式中间的分支,也可以写成:
glob('*(@(abc)|@(xyz))*.pdf', { extglob: true }, (err, files) => { // 同样能匹配目标文件 });
小提醒
- 如果你的模式里包含逗号、
|这类特殊字符,记得用反斜杠\转义,避免语法解析错误。 - 数组方式的可读性更好,适合模式差异大的情况;单个字符串方式更简洁,适合模式结构相似的场景,你可以根据实际需求选。
内容的提问来源于stack exchange,提问作者goryef
相关产品推荐
相关产品推荐

