一个与目录浅表匹配的glob

时间:2016-09-20 19:34:50

标签: regex node.js glob

以下是一个案例示例,以及它们是否匹配:

foo/node_modules -> yep

foo/bar/node_modules -> yep

foo/bar/node_modules/baz/node_modules -> matches only foo/bar/node_modules

foo/node_modules/bar/node_modules -> matches only foo/node_modules

node_modules/foo/node_modules/bar -> matches only node_modules

修改

这为2个级别做了诀窍:

const patterns = [
  '*/node_modules',
  '*/!(node_modules)/node_modules',
  '*/!(node_modules)/*/node_modules',
]

1 个答案:

答案 0 :(得分:1)

glob规则"应用于文件名的各个部分(在路径分隔符/处停止)。" 这意味着您可以& #39;执行跨越多个深度的任何通配符匹配,这对您的问题至关重要。我看到直接完成这个问题的唯一方法是使用多次搜索(并在第一次匹配后停止),例如:

  • ls node_modules
  • ls */node_modules
  • ls */*/node_modules
  • ls */*/*/node_modules

但是,这可以是accomplished with a regular expression

^.*?node_modules(?=\/|$)

或者,您可以使用Node.JS递归遍历目录,直到您点击node_modules的第一个实例并返回路径。

相关问题