路径模式匹配glob -- nodejs常用模块(7)

时间:2022-09-01 23:18:10

模块介绍

  • glob模式是指 shell 所使用的简化了的正则表达式。
  • 这里的nodejs的glob模块是,glob模式的javascript实现版本。
  • 每种语言的glob模式会有细小的区别,如js实现的glob模式中支持了**。可以参考这里的文档:https://github.com/isaacs/minimatch
  • 这里的glob模块的功能:返回匹配指定模式的文件名或目录。

帮助文档
http://www.gruntjs.org/article/configuring_tasks.html
https://github.com/isaacs/minimatch
https://github.com/isaacs/node-glob

demo
1.glob的demo

/**
* 检索某个目录下,符合这些正则表达式的文件列表
*/

var pattern2fileList = function(src, patternList, callback) {
var pattern = '{'+patternList.join(',')+'}';
var glob = require("glob");
glob(pattern, {cwd:src, mark:true}, callback);
}

//demo
var patternList = ['node-glob/**/*.{js,json}','*.js', 'node-glob']; //{,}中逗号后面不能有空格
var src = '../source';
pattern2fileList(src, patternList, function (err, fileList) {
if(err) {
console.log(err);
return ;
}
console.log(fileList);
});

2.minimatch的demo

var minimatch =require('minimatch');
//var result = minimatch('bb/a', '**a'); //false
//var result = minimatch('bb/a', '**/a'); //true
//var result = minimatch('bb/cc/bba', '**a'); //false
var result = minimatch('bb/cc/bba', '**/*a'); //true
console.log(result);

这个东东就是个校验工具。


glob中的参数说明

第一个参数
一个glob模式的式子

第二个参数options常用属性

  • cwd The current working directory in which to search. Defaults to process.cwd().
  • mark Add a / character to directory matches. Note that this requires additional stat calls. default false
  • nocase Perform a case-insensitive match. Note that case-insensitive filesystems will sometimes result in glob returning results that are case-insensitively matched anyway, since readdir and stat will not raise an error.
  • debug Set to enable debug logging in minimatch and glob.


glob模式语法说明

基本语法介绍

  • * 匹配任意数量的字符,但不匹配/
  • ? 匹配单个字符,但不匹配/
  • ** 匹配任意数量的字符,包括/,只要它是路径中唯一的一部分
  • {} 允许使用一个逗号分割的列表或者表达式
  • ! 在模式的开头用于否定一个匹配模式(即排除与模式匹配的信息)
    ps:这里只是列了js版本的glob模式的一些常用语法。

特殊语法**
看了官方文档也没看明白,写了些demo测试了下(如上minimatch的demo),觉得**匹配的内容为路径的父目录或者为空时才会生效。