如何在 Node.js 中通配多个模式?

问题描述 投票:0回答:4

是否可以在 Node.js 的

glob
的单个搜索字符串中包含多个模式?

例如查找名为

*abc*.pdf
*xyz.pdf*

的所有文件
node.js wildcard glob
4个回答
10
投票

使用 node-glob 时,您可以提供多种模式,如下所示:

 "*(pattern1|pattern2|...)"

在你的例子中翻译如下:

 "*(abc.pdf|xyz.pdf)"

完整示例(查找当前目录中的所有 .html 和 .js 文件):

glob("*(*.js|*.html)", {}, function (err, files) {
   console.log(files)
})

3
投票

截至 2024 年更新

如果您有 Node.js 22 或更高版本,则无需使用 node-glob 包即可使用

glob
fs
模块附带
glob
globSync

基于 alexloehr 的回答,您可以像这样本地使用

glob

import { glob } from 'node:fs/promises';

for await (const entry of glob("*(*.js|*.html)")){
  console.log(entry)
}

2
投票

对于那些想要具有多个文件扩展名的递归匹配的 glob 选项的人。这将匹配

path
文件夹中扩展名为
.ts?x
.js?x
的所有文件。

import * as glob from "glob";
// Synchronous operation
glob.sync(`path/**/*(*.ts|*.tsx|*.js|*.jsx)`, {...globOptions});
// Asynchronous operation
glob(`path/**/*(*.ts|*.tsx|*.js|*.jsx)`, {...globOptions}, () => {});

2
投票

根据此评论,您可以使用

{,,,,}
语法进行多个匹配:

glob.sync('{abc.pdf,xyz.pdf}')

使用通配符:

glob.sync('{*.js,*.html}')
© www.soinside.com 2019 - 2024. All rights reserved.