2016-12-13 192 views
2

我的路径的阵列,假设:是否字符串匹配glob模式

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

另外我有与用于该路径附加属性的配置文件中的一个通配符(水珠)格式中的条目,如在:

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

问题:有一种简单的方法来验证,如果路径中的通配符表达式匹配?

例如:

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

if (matches) { 
    //do something 
} 

FYI:我使用https://github.com/isaacs/node-glob

+0

嘿,我不熟悉glob表达式中连续的2个星号,在你的示例中'*'和'**'有什么区别? – chiliNUT

+0

我想我理解你的问题,我只是不明白连续2星的含义是在glob表达式中 – chiliNUT

+1

您的编辑没有从@chiliNUT中回答(良好)问题!所以,再次说明:**是什么意思? – cFreed

回答

4

你可以水珠转换为正则表达式与节点glob-to-regex然后验证路径字符串对正则表达式。
https://www.npmjs.com/package/glob-to-regexp

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

和节点都有自己的水珠实施
https://github.com/isaacs/minimatch

我的第一个想法是,看看phpjs实施了水珠功能,但看起来他们没有:(
http://locutus.io/php/

+1

我自己也在使用node-glob。但它没有我期待的“匹配”支持。 –

+0

关闭了我的脑袋(还没有测试过),好像你可以用'([^。/] *)'替换一颗星星,并用'([^ /] +/*)替换一个星星, +'然后调用正则表达式 – chiliNUT

+0

@AlanSouza也发现'minimatch',尽管它仍然可能与'node-glob'有相同的限制,因为它是由同一个人 – chiliNUT