【问题标题】:Does String match glob pattern字符串是否匹配全局模式
【发布时间】:2016-12-13 00:58:39
【问题描述】:

我有一个路径数组,比如说:

/Users/alansouza/workspace/project/src/js/components/chart/Graph.js

此外,我在配置文件中有一个条目,该条目具有通配符(glob)格式的此路径的附加属性,如:

{
  '**/*.js': {
    runBabel: true
  }
}

问题:是否有简单的方法来验证路径是否与通配符表达式匹配?

例如:

const matches = Glob.matches(
  '**/*.js',
  '/Users/alansouza/workspace/project/src/js/components/chart/Graph.js'
);

if (matches) {
  //do something
}

仅供参考:我正在使用https://github.com/isaacs/node-glob

【问题讨论】:

  • 嘿,我不熟悉 glob 表达式中连续两个星号,在您的示例中,*** 之间有什么区别?
  • 我想我明白你的问题,我只是不明白在 glob 表达式中连续 2 颗星是什么意思
  • 您的编辑没有对@chiliNUT 的(好)问题做出回应!所以,再说一遍:** 应该是什么意思?
  • 再次抱歉。这意味着它将匹配路径中的任何子目录级别。我自己不是 glob 模式的专家,所以看看这个:stackoverflow.com/questions/8532929/two-asterisks-in-file-path
  • 酷,我刚刚学到了一些新东西:)。所以,我的想法是将 glob 转换为正则表达式,然后 javascript 可以使用它来验证路径名。这是一个可以做到这一点的 npm:npmjs.com/package/glob-to-regexp

标签: javascript regex wildcard glob


【解决方案1】:

您可以使用节点 glob-to-regex 将 glob 转换为正则表达式,然后根据正则表达式验证路径字符串。
https://www.npmjs.com/package/glob-to-regexp

看起来node glob 是另一种选择。
https://github.com/isaacs/node-glob

并且节点有自己的 glob 实现
https://github.com/isaacs/minimatch

我的第一个想法是看看 phpjs 是否实现了一个 glob 函数,但看起来他们没有:(
http://locutus.io/php/

【讨论】:

  • 我自己也在使用 node-glob。但它没有我正在寻找的“匹配”支持。
  • 在我的脑海中(尚未测试),您似乎可以做一些事情,例如用 ([^./]*) 替换单星,用 ([^/]+/*)+ 替换双星,然后将其称为正则表达式
  • @AlanSouza 也发现了 minimatch,尽管它仍然可能具有与 node-glob 相同的限制,因为它是同一个人的
【解决方案2】:

正如@chiliNUT 在评论中提出的理论,minimatch 具有这种行为:

minimatch("file.js", "**/*.js") // true/false
minimatch.match(["file1.js", "file2.js"], "**/*.js") // array of matches

【讨论】:

  • 不错!这是对我不完整答案的一个很好的解决方案
猜你喜欢
  • 1970-01-01
  • 2012-09-17
  • 2015-11-18
  • 2010-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-11
  • 1970-01-01
相关资源
最近更新 更多