这两个glob模式之间有什么区别吗?

时间:2019-02-14 06:52:25

标签: javascript node.js glob

images/**/*.{png,svg}
images/**/*.+(png|svg)

当我测试它们时,它们通常会产生相同的结果。但是只需要确保它们完全相同即可。

1 个答案:

答案 0 :(得分:0)

它们不是完全相同,并且它们都可能产生不同的结果-有关更多信息,请参考glob primer。它指出:

  

+(pattern|pattern|pattern)匹配一个或多个出现的所提供模式。

您的第二种模式; images/**/*.+(png|svg),将匹配文件名末尾的{strong> 一次或多次出现

但是,您的第一个模式; png仅在文件名末尾有svgimages/**/*.{png,svg} 项时才匹配。

示例:

假设我们有四个文件,分别为:

  • png
  • svg
  • foo.svg
  • foo.svgsvg

及其路径为:

foo.png

匹配结果

给出两个示例模式-您的第一个模式; foo.pngpngpng,将仅匹配以下两个路径:

  • . ├── images │   ├── ... │   └── quux │ ├── foo.svg │   ├── foo.svgsvg │ ├── foo.png │ └── foo.pngpngpng
  • images/**/*.{png,svg}

注意:文件images/quux/foo.svgimages/quux/foo.png的路径已被忽略

但是您的第二种模式; foo.svgsvg将匹配所有四个文件路径,即:

  • foo.pngpngpng
  • images/**/*.+(png|svg)
  • images/quux/foo.svg
  • images/quux/foo.svgsvg

  

“当我测试它们时,它们通常会产生相同的结果。”

这是因为您不太可能拥有扩展名为images/quux/foo.pngimages/quux/foo.pngpngpng的文件(即,当它多次出现.pngpng或{{ 1}})。您也永远不会。

但是,我建议您使用第一个glob模式,即.svgsvgsvg,因为它对于您实际想要匹配的内容更加简洁。