-
Notifications
You must be signed in to change notification settings - Fork 27
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
glob 模式匹配简明教程 #18
Labels
Comments
Open
thx,这三个表做的太帅了,一眼查。 |
cool!!! |
Repository owner
deleted a comment from
xiaomazi888
May 20, 2022
Beautiful! |
勘误: [^abc]或[!abc] 的描述、示例搞错了,和上面的重复了(可能是复制文章时的问题) 我看你发在掘金的文章里是正确的:https://juejin.cn/post/6844904077801816077 |
谢谢指出,已更正 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
内容目录:
介绍
根据维基百科的介绍,在计算机编程中 glob 模式表示带有通配符的路径名,例如在 bash 中查看文件列表:
它最初是贝尔实验室 Unix 系统上的一个名叫 glob 的命令(glob 是 global 的缩写),用于展开命令行中的通配符。后来系统提供了该功能的 C 语言库函数
glob()
,知名的 shell 解释器就使用了该接口,shell 脚本和命令行中使用的 glob 模式匹配功能便源自于此。基础语法
相比正则表达式大量的元字符,glob 模式中元字符极少,所以掌握起来也很快。glob 默认不匹配隐藏文件(以点
.
开头的文件或目录),下面是 glob 的语法:*
Law*
Law
,Laws
和Lawer
La
,aw
?
?at
cat
,bat
at
[abc]
[cb]at
cat
,bat
at
,bcat
[a-z]
[a-z]at
aat
,bat
,zat
at
,bcat
,Bat
[^abc]
或[!abc]
[!CB]at
cat
,bat
Cat
,Bat
[^a-z]
或[!a-z]
[!A-Z]at
aat
,bat
,zat
Aat
,Bat
,Zat
扩展语法
除了基础语法外,bash 还支持 glob 的一些扩展语法,主要包含三种:
三种扩展语法的定义和描述如下:
{x, y, ...}
a.{png,jp{,e}g}
a.png
,a.jpg
,a.jpeg
**
**
后面紧接着/
则只匹配目录,不含隐藏目录src/**
src/a.js
,src/b/a.js
,src/b/
src/.hide/a.js
?(pattern-list)
a.?(txt|bin)
a.
,a.txt
,a.bin
a
*(pattern-list)
a.*(txt|bin)
a.
,a.txt
,a.bin
,a.txtbin
a
+(pattern-list)
a.+(txt|bin)
a.txt
,a.bin
,a.txtbin
a.
,a
@(pattern-list)
a.@(txt|bin)
a.txt
,a.bin
a.
,a.txtbin
!(pattern-list)
a.!(txt|bin)
a.
,a.txtbin
a.txt
,a.bin
与 regexp 的差异
glob 模式主要用于匹配文件路径,当然也可以用于匹配字符串,不过在匹配字符串的能力上比 regexp 要弱很多。由于 glob 模式和 regexp 存在相同的元字符,但是含义却不同,容易导致混淆,为了避免混淆,下面将 glob 模式转换成对应的 regexp 表示,以便区分他们的异同点。
*
.*
^(?!\.)[^\/]*?$
?
.
^(?!\.)[^\/]$
[a-z]
[a-z]
^[a-z]$
JavaScript API
通过上面的介绍,已经了解到 glob 模式可以用于匹配文件路径,甚至字符串,如何使用呢?在 JavaScript 中,正则表达式是以标准 API 形式提供的,开箱即用。但是 glob 模式匹配并非 JavaScript 中的标准 API,需要自行解析和匹配,这里介绍一个用 JavaScript 编写的 glob 的匹配库 minimatch,它支持 glob 基础语法和扩展语法,可以实现 glob 的测试、匹配以及转换成正则表达式。下面是使用示例:
应用例子
glob 最常见的应用场景是匹配文件路径,使用 glob 匹配文件路径比正则表达式更简洁。下面例子实现利用 glob 模式过滤文件路径:
如果要通过 glob 模式遍历文件系统,可使用 node-glob ,它基于 minimatch 和 node 实现 glob 模式遍历文件的 API。
参考
The text was updated successfully, but these errors were encountered: