前言

在本文中我将以glob是什么,glob的语法,glob与正则表达式的差异等几个方面对glob模式匹配进行一个梳理,希望也能对读者起到一定的帮助。

glob 是什么

glob是用于文件名的一种模式匹配,全程global,起源于贝尔实验室的 Unix 最早期的版本。后来,这项功能以库函数glob()的形式提供,被用于shell等程序。在日常使用bash命令时,经常用到的如ls *.txt的命令就使用到了glob模式。

语法

分隔符和片段

概念:分隔符即为文件路径中的/,而路径通过split('/')得到数组的每一项即为片段。

示例

  • app/src/**有3个片段,分别为:app,src,**

基础语法

Glob 不匹配任何隐藏文件或文件夹。

通配符 描述 示例 匹配结果(部分) 不匹配(部分)
* 匹配单个片段中零或多个字符 src/*.ts src/a.ts , src/ant.ts src/a/a.ts
? 匹配单个片段中的任意单个字符 ?at cat, Bat at, tcat
[abc] 匹配单个片段的单个字符, 但字符需属于括号内的字符集合 [AB]ct Act, Bct cct
[a-z] 匹配单个片段的单个字符,但字符需在括号内字符范围 example[0-9] example0, example1 example10, examples
[!abc][^abc] 匹配单个片段的单个字符,但字符需不属于括号内的字符集合 [!ab].js / [^ab].js c.js ab.js, a.js
[!a-z]或者[^a-z] 匹配单个片段的单个字符,但字符需属于括号内字符范围 example[!3-7] / example[^3-7] example2, example1 example3, example5

扩展语法

通配符 描述 示例 匹配结果(部分) 不匹配(部分)
** 匹配一个或多个片段(跨片段)中的零或多个字符 app/src/** app/src/a,js, app/src/ab/c.js app/components/a.js
{x,y, ...} 匹配大括号内的所有模式,模式之间用逗号分隔,支持大括号嵌套,支持..匹配连续字符 {{a..b},c}.js a,js, b.js, c.js d.js, ab.js
`?(pattern pattern pattern)` 匹配0次或1次给定的模式 `a.?(txt
`*(pattern pattern pattern)` 匹配0次或多次给定的模式 `a.*(txt
`+(pattern pattern pattern)` 匹配1次或多次给定的模式 `a.+(txt
`@(pattern pattern pattern)` 严格匹配给定的模式 `a.@(txt
`!(pattern pattern pattern)` 匹配非给定的模式 `a.!(txt

与 regexp 的差异

glob模式主要用于匹配文件路径,也可匹配字符串,不过能力比regexp弱。需要注意的是,glob模式的许多元字符和regexp相同,但含义却是不同的。

glob regexp 精确的 regexp
* .* ^(?!\.)[^\/]*?$
? . ^(?!\.)[^\/]$
[a-z] [a-z] ^[a-z]$

glob 匹配的是整个字符串,而 regexp 默认匹配的是子串,regexp 如果要匹配整个字符串需显式指定^和$。

应用场景

glob最常见的应用场景就是匹配文件路径,在代码覆盖率istanbul中就使用了glob模式(test-exclude)用于筛选需要进行插桩的文件。

参考

原文地址:http://www.cnblogs.com/rainbowly/p/16923195.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性