【问题标题】:A glob to shallowly match directories用于浅匹配目录的 glob
【发布时间】:2016-09-20 19:34:49
【问题描述】:

以下是案例示例以及它们是否应该匹配:

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',
]

【问题讨论】:

    标签: regex node.js glob


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 谢谢伙计!很好的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 2020-02-27
    • 2021-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多