首页 > 其他分享 >Glob模式匹配

Glob模式匹配

时间:2022-11-24 20:47:06浏览次数:58  
标签:字符 片段 匹配 pattern Glob js glob 模式匹配

前言

在本文中我将以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)用于筛选需要进行插桩的文件。

参考

标签:字符,片段,匹配,pattern,Glob,js,glob,模式匹配
From: https://www.cnblogs.com/rainbowly/p/16923195.html

相关文章

  • MySQL中用户和系统变量设置获取使用@和@@ global和session--笔记
    1、概述mysql有用户变量和系统变量,系统变量又分全局(global)和会话(session)查看set命令root@localhost:01:23[7308][(none)]>helpset;Name:'SET'Description:Syntax:......
  • Codeforces Global Round 23 D
    D.PathsontheTree思考问题我们发现我们路径总是可以走到底的而不会中途中断而且对于每一个分叉点也就是每个儿子至少都会有当前还剩的k/儿子数取余剩下的我们可以......
  • JavaScript对象_Global和案例1_点灯开关
    JavaScript对象_Global:Global:1.特点:全局对象,这个Global中封装的方法不需要对象就可以直接调用。方法名();2.方法:encodeURI():url编码decodeURI():url解码encodeUR......
  • 84:nonlocal_global
    ###nonlocal关键字nonlocal用来声明外层的局部变量。global用来声明全局变量。【操作】使用nonlocal声明外层局部变量#测试nonlocal、global关键字的用法a=1......
  • JavaScript_对象_Global与DOM简单学习
    JavaScript_对象_GlobalGlobal:全局对象1.特点:全局对象,这个Global中封装的方法不需要对象就可以直接调用。方法名();2.方法......
  • npm WARN config global `--global`, `--local` are deprecated. Use `--location 的
    1.背景2.解决步骤2.1.找到nodejs的安装路径 2.2.修改配置文件将文件里的prefix-g改为prefix--location=global 修改前: 修改后: 点击保存就解决了注意,......
  • Global Mapperv17 裁剪dem并导出等高线
    1、加载dem数据数据投影2、加载shp范围3、选中范围数据4、裁剪5、生成等高线6、导出等高线矢量......
  • JavaScript对象-Global
    1.特点:全局对象这个Global中封装的方法不需要对象就可以直接调用方法名2.方法encodeURI():url编码decodeURI():url解码encodeURIComponent():url编码,编码的字符更......
  • JavaScript对象RegExp1和GloBal
    JavaScript对象_RegExp1RegExp:正则表达式对象1.正则表达式:定义字符串的组成规则1.单个字符:[]如:[a][ab][a-zA-Z0-9]......
  • Codeforces 1738 / Codeforces Global Round 22
    目录ContestLinkProblemAGloryAddictsProblemBPrefixSumAddictsProblemCEvenNumberAddictsProblemDPermutationAddictsProblemEBalanceAddictsProblemF......