glob 表达式
大约 3 分钟
glob 表达式
简介
当我们需要在文件系统中进行 文件路径 匹配时,可以使用 glob
模式来快速匹配符合特定模式的文件路径,它是一种简单且常用的模式匹配语法,广泛应用于文件操作和构建工具中
其语法规则如下:
- *: 匹配 0 个或者多个字符,比如
d*
,可以匹配d
,dl
,ddl
- ?: 匹配单个字符,比如
d?
,只匹配dd
,不能匹配d
- []: 包含在[]中的字符,只会被匹配一个,并且[]不可以为空,比如 [abc] 匹配 a,b,c 三个中的一个字符
- -: 两个字符中间用'-'连接表示 range,比如[0-9]等同于[0123456789],需要注意的是如果'-'出现在开头或者结尾,并不表示 range,比如[-a]或者[a-]匹配 '-'或'a' 字符中的一个
- !: 取反,[!abc] 表示匹配 a,b,c 之外的一个字符
- **: 双星号代表可以匹配后代所有子目录
- 任何以 . 开头命名的文件,都必须在 glob 中显示指定才能匹配,比如有一个文件.abc,那么
rm *
匹配不到.abc,只能使用rm .*
示例
以下是一些常见的 glob
匹配模式示例:
*.js
:匹配当前目录下所有以.js
结尾的文件src/**/*.js
:匹配src
目录及其所有子目录下的所有以.js
结尾的文件app.{js,css}
:匹配当前目录下的app.js
和app.css
文件!dist/*.js
:排除匹配dist
目录下的所有.js
文件[abc].js
:匹配当前目录下的a.js
、b.js
和c.js
文件?(pattern|pattern|pattern).js
:匹配当前目录下的零个或一个括号内指定的模式文件,如pattern.js
、pattern2.js
+(pattern|pattern|pattern).js
:匹配当前目录下至少一个括号内指定的模式文件,如pattern.js
、pattern2.js
*(pattern|pattern|pattern).js
:匹配当前目录下任意数量的括号内指定的模式文件,如pattern.js
、pattern2.js
@(pattern|pat*|pat?erN).js
:匹配当前目录下与括号内模式之一匹配的文件,如pattern.js
、patN.js
正则表达式与 glob
匹配的区别
正则表达式和 glob
匹配都是用于 模式匹配,但它们在语法和用途上存在一些区别:
- 语法差异:正则表达式使用 特殊符号 来表示模式,具有更高的灵活性和表达能力,而
glob
使用通配符(如*
和?
)来匹配文件路径模式,更加简洁易懂 - 匹配范围:正则表达式可以匹配更复杂的 文本模式,而
glob
主要用于匹配 文件路径模式 - 匹配方式:正则表达式是通过模式的 匹配规则 来匹配字符串的,可以进行更精确的匹配和提取,而
glob
是根据 通配符 来匹配文件路径,只能进行简单的文件名匹配 - 使用场景:正则表达式适用于需要对字符串进行 复杂模式匹配和替换 的场景,如验证表单数据、提取特定信息,
glob
主要用于 文件操作,如文件查找、筛选