You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 18:32:47