npm 包 picomatch 使用教程

前言

在前端开发中,我们经常需要进行文件路径的匹配和筛选,以实现特定功能的需求。然而,正则表达式虽然是文件路径匹配的常用工具,但其语法复杂、难以维护,同时还容易出现匹配错误的情况。因此,Node.js 生态圈中就出现了一系列轻量级的文件路径匹配工具,如 minimatchmicro-match 等。本文介绍其中之一的 picomatch,并详细演示其用法。

picomatch 简介

picomatch 是一个高速、精确且易用的路径匹配工具。它支持大部分 glob 语法(即通配符语法),并且消除了通配符之间的歧义,从而使得使用者能够更轻松地理解和编写匹配规则。同时,picomatch 使用快速的字符串分析算法,并且对于较大的匹配集合,它的性能表现也非常出色。

安装

picomatch 可以通过 npm 安装:

--- ------- --------- ----------

使用

基本用法

使用 picomatch 进行路径匹配可以采用如下基本的语法:

----- --------- - ---------------------

-- -- --------- --------
------------------ ------------- -- -- ----
------------------ ------------ -- -- -----

上述代码中,第一个参数是匹配规则,第二个参数是待匹配的路径。在这里,我们使用通配符 * 表示任意字符(包括空字符串),并结合 .txt 后缀限制,从而匹配以 .txt 为后缀的文件。

glob 语法

除了支持基本的通配符语法,picomatch 还支持 glob 语法的大部分特性,如:

  • ?:匹配任意单个字符(不包括空字符串);
  • *:匹配任意数量的字符,包括空字符串;
  • **:匹配任意数量的字符和目录(含子目录);
  • []:匹配字符集中的任意一个字符;
  • {}:匹配其中任意一个选择项。

下面我们逐个实例介绍这些用法。

匹配单个字符

-- -- - ----------------
---------------- ------- -- -- ----
---------------- ------ -- -- -----
---------------- ------- -- -- ----

在上述代码中,我们使用 a?c 匹配一切形如 axc 的字符串(其中 ? 只能代表单个字符,不包括空字符串)。因此,对于 abc,第二个字符 bc 不匹配,所以返回 false;对于 acc,第二个字符 cc 匹配成功,所以返回 true

匹配任意数量字符

-- -- - -----------------
---------------- ------ -- -- ----
---------------- ------- -- -- ----
---------------- ----------- -- -- ----

在上述代码中,我们使用 a*c 匹配一切形如 ac 或以 a 开头、以 c 结尾的字符串(其中 * 包括 0 个或多个任意字符,包括空字符串)。因此,对于 acabc,匹配条件均成立;对于 axxxxxc,匹配条件也成立,因为第二个 x 向前扩展为零个字符。

匹配目录

-- -- -- ------------------
---------------------------- ---------------------- -- -- ----
---------------------------- ---------------- -- -- ----
---------------------------- -------------------------------- -- -- ----

在上述代码中,我们使用 src/**/*.js 匹配一切以 .js 为后缀的文件,并且可能在 src 目录中出现的任意子目录下。因此,对于 src/views/index.jssrc/index.jssrc/components/main/index.js,匹配规则均成立。

picomatch 中,使用 ** 在匹配规则中表示一个或多个目录或子目录(用 / 分隔)。这样做可以实现相对灵活的匹配策略,同时也减小了模式匹配的复杂度。

匹配字符集

-- -- -- -------------
------------------------ ------------ -- -- -----
------------------------ ----------- -- -- ----
------------------------- ------------ -- -- ----

在上述代码中,我们使用 [a-z] 的字符集,限制了匹配条件必须包含小写字母 az 中的一个。因此,第一个匹配条件不成立,第二个和第三个匹配条件则均成立。

除了基本的字符集,还可以使用补集,即在字符集前加一个 !,表示不匹配该字符集中的任何一个字符。

匹配选择项

-- -- -- -----------
--------------------------------------- ---------------- -- -- ----
--------------------------------------- ----------------- -- -- -----

在上述代码中,我们使用 {} 匹配三个中括号内的任意一个选择项。因此,第一个匹配条件成立,第二个匹配条件不成立。

值得注意的是,在使用选择项时,选择项不允许嵌套,如下述语法是错误的:

-- ----
----------------------------------------------- ----------------- -- -- -----

高级用法

返回匹配的文件路径列表

除了单次匹配,picomatch 还支持返回匹配的文件路径列表,可以使用 picomatch.scan() 方法:

----- --------- - ---------------------

----- ------- - ----------------------------- -
  ---- --------------
  ------ -----
---
---------------------

上述代码中,我们使用 src/**/*.js 匹配一切以 .js 为后缀的文件,并且可能在 src 目录中出现的任意子目录下。参数 nodir: true 表示只匹配文件,而不匹配目录。

通过 picomatch.scan() 实现的匹配结果是一个字符串数组,包含了所有匹配成功的文件路径。

结合 minimatch 支持功能更加强大的 glob 语法

picomatch 支持的 glob 语法非常丰富,但还有一些特殊场景需要使用更加强大的 glob 语法。在这种情况下,我们可以通过结合 minimatchpicomatch,实现复杂的路径匹配:

----- --------- - ---------------------
----- --------- - ---------------------

----- ----- - ------ --------- -- -
  ----- ------- - --------------------- -- --------------- ----------
  -- --------- -
    ------ --------------- ----------
  -
  ------ ------
--

--------------------------------- ------------------------ -----------------

在上述代码中,我们使用被否定的 glob 模式 !src/node_modules/** 和匹配模式 src/**/*.js 来筛选出所有的以 .js 为后缀的非 node_modules 目录下的文件。通过结合 minimatchpicomatch,我们实现了一个更加强大的路径匹配功能。

总结

在本文中,我们介绍了一个高速、精确且易用的路径匹配工具 picomatch,并且演示了其详细的使用方法。通过本文的学习,你已经掌握了 picomatch 的基本用法和 glob 语法,可以在实际的前端开发过程中应用该工具,提高文件路径匹配的效率和准确性。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/5eedad26b5cbfe1ea0610bea


猜你喜欢

  • npm 包 monocle-ts 使用教程

    在前端开发中,我们经常会遇到需要处理、操作对象中的一部分数据的情况,而 monocle-ts 就是一个可以帮助我们做到这一点的 npm 包。它提供了一种用函数式编程(Functional Progra...

    4 年前
  • npm 包 typings-checker 使用教程

    在前端开发中,我们经常会使用许多第三方开源库来构建我们的应用程序。这些库通常会提供一些类型声明文件,以便我们在编写代码时获得更好的类型提示和编译检查。然而,有时候,我们可能会遇到一些问题,例如缺少必要...

    4 年前
  • npm 包 @otplib/plugin-crypto 使用教程

    简介 在前端开发过程中,我们经常需要使用到 TOTP(Time-based One-Time Password)算法来进行安全认证等操作。@otplib/plugin-crypto 是一个使用 HMA...

    4 年前
  • npm 包 @otplib/plugin-thirty-two 使用教程

    简介 @otplib/plugin-thirty-two 是一款支持使用 Base32 算法生成一次性密码的 npm 包。它基于 Node.js 平台,可以广泛应用于前端开发中的身份验证等安全场合。

    4 年前
  • npm 包 @types/lodash.every 使用教程

    概述 在开发前端项目的过程中,我们经常会使用到 Lodash 库。Lodash 是一个 JavaScript 实用工具库,提供了很多有用的函数,能够大幅度提高我们的编码效率,并且具有良好的跨浏览器兼容...

    4 年前
  • npm 包 @0x-lerna-fork/npm-run-script 使用教程

    前言 在前端开发中,我们经常需要在命令行中运行各种脚本。npm 提供了一种很方便的方式来运行脚本,即使用 npm run 命令。使用 npm run 可以方便地运行项目中定义的脚本,并且可以按照依赖关...

    4 年前
  • npm 包 @0x-lerna-fork/timer 使用教程

    介绍 @0x-lerna-fork/timer 是一个基于 Node.js 的计时器模块,可以在前端中使用。该模块提供了方便的接口来管理定时器,并允许您对时间间隔和回调函数进行更改。

    4 年前
  • npm 包 @0x-lerna-fork/query-graph 使用教程

    简介 在前端领域中,经常会涉及到对于数据的处理和展示。对于多个数据源的管理和查询往往会变得比较复杂。这时我们可以考虑使用 @0x-lerna-fork/query-graph,这是一个基于 Graph...

    4 年前
  • npm 包 @octokit/plugin-enterprise-rest 使用教程

    在前端开发中,我们经常需要使用不同的库和工具,以提高我们的工作效率。npm 是一个广泛使用的包管理器,它为我们提供了一个开源的资源库,以轻松地下载、安装和使用不同的软件包和模块。

    4 年前
  • npm 包 @0x-lerna-fork/package 使用教程

    简介 在前端开发中,使用 npm 包是非常常见的事情。而 @0x-lerna-fork/package 这个包是一个非常实用的包,它可以为我们的项目提供一些非常便利的功能。

    4 年前
  • npm 包 terminal-overwrite 使用教程

    在前端开发中,我们经常需要在终端中输出信息,在信息更新时候需要覆盖之前的内容,这时候就需要使用 terminal-overwrite。 什么是 terminal-overwrite? terminal...

    4 年前
  • npm 包 joi-validation-strategy 使用教程

    前言 在前端开发中,表单验证是必不可少的,为了方便开发者实现表单验证,社区中有很多优秀的表单验证库。本文将介绍一款基于 Joi 和 Angular 的表单验证策略库 joi-validation-st...

    4 年前
  • npm 包 babel-plugin-transform-react-inline-elements 使用教程

    介绍 babel-plugin-transform-react-inline-elements 是 Babel 的一个插件,用于将 React 中的一些元素替换成更高效的形式。

    4 年前
  • npm 包 beater-reporter 使用教程

    前言 在进行前端开发时,我们通常会使用各种工具来提高效率。beater-reporter 是一个非常便捷的 npm 包,它可以帮助我们生成测试报告,方便我们对测试进行管理和分析。

    4 年前
  • npm 包 eslint-plugin-better-mutation 使用教程

    简介 eslint-plugin-better-mutation 是一个用于检查 JavaScript 文件中不当变异操作的 ESLint 插件。变异操作是指直接改变变量的值而不是复制一个变量并更改其...

    4 年前
  • npm 包eslint-config-ag 使用教程

    在前端开发过程中,为了保证程序的规范和稳定性,我们经常需要使用工具进行代码检查和规范。其中,ESLint 是一款被广泛使用的 JavaScript 代码静态分析工具,因其高度可配置、插件扩展丰富,而深...

    4 年前
  • npm 包 cli-character-set 使用教程

    前言 在前端开发中,我们常常需要处理字符串或文本相关的问题。而有些问题可能需要对特定字符集进行操作或判断。本文介绍的 npm 包 cli-character-set 就是一个方便的工具,它可以为我们提...

    4 年前
  • NPM 包 eslintrc-up 使用教程

    前言 在前端开发中,我们通常会使用 eslint 工具对我们的代码进行规范检查。在不同的项目中,我们可能需要根据不同的编码规范来设置不同的 eslint 配置文件。

    4 年前
  • npm 包 lodash.padLeft 使用教程

    前端开发离不开大量的字符串操作,其中包括对字符串的截取、填充、替换等功能。在这些字符串操作中,经常需要用到字符串的长度来进行各种处理。为了方便开发者进行字符串操作,并避免重复造轮子,npm 社区中诞生...

    4 年前
  • npm 包 reactpack 使用教程

    前言 在 Web 前端开发中,我们经常会需要使用一些库或者框架来提高开发效率。而 npm 作为 JavaScript 最大的包管理工具,已经成为了前端领域不可替代的存在。

    4 年前

相关推荐

    暂无文章