日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Glob Patterns匹配模式使用

發(fā)布時(shí)間:2023/12/9 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Glob Patterns匹配模式使用 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前段時(shí)間在用workbox時(shí),在做precache時(shí),匹配模式基于的是Glob Pattern模式,于是就看了下相關(guān)文檔。

下面翻譯一下node-glob的使用,原文:https://github.com/isaacs/node-glob#glob-primer


Glob

像在shell里面,用*等匹配模式來匹配文件。

Glob基于Javascript實(shí)現(xiàn),使用minimatch庫進(jìn)行匹配。

使用

使用npm安裝

npm i glob var glob = require("glob")// options可選 glob("**/*.js", options, function (er, files) {// files是匹配到的文件數(shù)組// 如果`options`中的`nonull`為true, 當(dāng)未發(fā)現(xiàn)時(shí), files返回["**/*.js"]// `er`是一個(gè)錯(cuò)誤對(duì)象或者null })

Glob 入門

"Glob"是一種模式,類似于在命令行中輸入ls *.js,或是在.gitignore文件中寫build/*。

在解析路徑模式時(shí),大括號(hào)內(nèi)使用逗號(hào)進(jìn)行分隔,分隔部分可以包含/,所以a{/b/c,bcd}會(huì)被展開為a/b/c和abcd。

在匹配路徑使用時(shí),以下字符有一些特殊的作用:

  • *:匹配單路徑下的 0 個(gè)或 多個(gè) 字符串。
  • ?:匹配一個(gè)字符串。
  • [...]:匹配指定范圍內(nèi)的字符串,類似于正則表達(dá)式中的[]。如果[]中的第一個(gè)字符串是!或者^,則匹配不在范圍內(nèi)的任意字符串。
  • !(pattern|pattern|pattern):匹配與提供模式中不匹配的內(nèi)容。
  • ?(pattern|pattern|pattern):匹配提供模式中的 0次 或 1次。
  • +(pattern|pattern|pattern):匹配提供模式中的 1次 或 多次。
  • *(a|b|c):匹配提供模式中的 0次 或 多次。
  • @(pattern|pat*|pat?erN):匹配與提供模式中完全匹配的。
  • **:和*一樣,可以匹配路徑中的 0個(gè) 或 多個(gè),而且**可以匹配當(dāng)前目錄和子目錄。但無法抓去符號(hào)鏈接的目錄。

.點(diǎn)

如果匹配的文件或目錄部分以.開頭,除非匹配的路徑也以.開頭,否則不會(huì)匹配任何模式。

例如 a/.*/c模式會(huì)匹配a/.b/c。然而a/*/c模式卻不會(huì)進(jìn)行匹配,因?yàn)?并不是以.開始的。

你可以通過設(shè)置option dot:true,讓Glob把.做為正常字符串。

Basename的匹配

如果你在 option中設(shè)置matchBase:true,當(dāng)模式中沒有/,它會(huì)在任意目錄下去匹配。例如*.js會(huì)匹配到test/simple/basic.js。

空集

如果沒有匹配到任何文件,它會(huì)返回空數(shù)組[]。它與shell不一樣,shell會(huì)在未匹配的情況下返回本身。例如:

$ echo a*s*d*f a*s*d*f

可以通過設(shè)置optionnonull:true,來獲得和bash shell一樣的效果。

glob.hasMagic(pattern, [options])

如果pattern中有任何特殊字符串,則返回為true,否則返回為false。

注意:options會(huì)影響結(jié)果。
如果options中設(shè)置noext:true,那么+(a|b)將不會(huì)視為魔術(shù)模式。
如果模式中支持{}表達(dá)式,那么也屬于Magic,例如a/{b/c,x/y}。除非option設(shè)置nobrace:true。

glob(pattern, [options], cb)

  • pattern {String}: 匹配模式。
  • options {Object}
  • cb {Function}
    • err {Error | null}
    • matches {Array<String>}: 匹配模式后的文件名數(shù)組。

執(zhí)行異步全局搜索。

glob.sync(pattern, [options])

  • pattern {String}:匹配模式。
  • options {Object}
  • return: {Array<String>}:匹配模式下的文件名。

執(zhí)行異步全局搜索。

Class: glob.Glob

通過實(shí)例化glob.Glob來創(chuàng)建Glob對(duì)象。

var Glob = require("glob").Glob var mg = new Glob(pattern, options, cb)

它是一個(gè)EventEmitter。它會(huì)立即執(zhí)行遍歷目錄進(jìn)行匹配。

new glob.Glob(pattern, [options], [cb])

  • pattern {String}: 匹配模式。
  • options {Object}
  • cb {Function}:成功或失敗的回掉。
    • err {Error | null}
    • matches {Array<String>}: 匹配后的文件名數(shù)組。

注意 如果option設(shè)置sync標(biāo)志, 那么匹配結(jié)果可以通過g.found獲取。

屬性

  • minimatch :glob使用的minimatch對(duì)象。
  • options :傳入的option對(duì)象。
  • aborted :布爾值,在調(diào)用abort()時(shí)會(huì)設(shè)置為true。 在abort()后無法再進(jìn)行全局搜索,但是可以通過重新設(shè)置statCache去避免重復(fù)系統(tǒng)調(diào)用。
  • cache :Object,可能有以下值:
    • false - 路徑不存在。
    • true - 路徑存在。
    • 'FILE' - 路徑存在,但不是目錄。
    • 'DIR' - 路徑存在,是目錄。
    • [file, entries, ...] - 路徑存在,結(jié)果是數(shù)組,類似于fs.readdir的結(jié)果。
  • statCache:fs.stat結(jié)果緩存,避免多次計(jì)算相同路徑。
  • symlinks :記錄哪些路徑是符號(hào)鏈接,與**模式相關(guān)。
  • realpathCache :傳遞給fs.realpath的可選參數(shù),避免不必要的系統(tǒng)調(diào)用。存儲(chǔ)在Glob的實(shí)例對(duì)象上,可重復(fù)使用。

事件

  • end:匹配完成后,收到匹配的結(jié)果。當(dāng)nonull設(shè)置時(shí),在沒有匹配結(jié)果的情況下會(huì)在返回的數(shù)組中包含原匹配模式字符串,默認(rèn)情況下匹配結(jié)果是被排序的, 除非設(shè)置nosort。
  • match: 每次發(fā)現(xiàn)匹配結(jié)果就會(huì)觸發(fā),結(jié)果中包含匹配的信息。它不會(huì)刪除重復(fù)數(shù)據(jù)和解析的真實(shí)路徑。
  • error:在發(fā)生意外錯(cuò)誤時(shí)觸發(fā)。 如果設(shè)置options.strict,那么任何fs的錯(cuò)誤都會(huì)觸發(fā)。
  • abort:abort()調(diào)用時(shí)觸發(fā)。

方法

  • pause:暫時(shí)停止搜索。
  • resume:恢復(fù)搜索。
  • abort:終止搜索。

選項(xiàng)

所有Minimatch的選項(xiàng)都可以傳遞給Glob去改變匹配模式,此外還添加了一些特有的glob-specific。

除非另有說明,否則所有選項(xiàng)默認(rèn)都為false。

所有選項(xiàng)也會(huì)被添加到Glob對(duì)象上。

如果正在運(yùn)行多個(gè)glob操作,可以通過Glob對(duì)象的傳遞options給后面的操作使用,方便某些stat和readdir調(diào)用。可以通過共享symlinks statCache realpathCache cache option加快并行g(shù)lob操作。

  • cwd:要搜索的當(dāng)前目錄。默認(rèn)process.cwd()。
  • root:以/開始的掛載位置。默認(rèn)是path.resolve(options.cwd, "/")(Unix系統(tǒng)是/,其他的一些Windows系統(tǒng)是C:\)。
  • dot:在正常模式和**模式下包含.。注意,在模式字符串中定義的點(diǎn)將始終與.文件匹配。
  • nomount:默認(rèn)匹配模式中以/開始的會(huì)轉(zhuǎn)到根目錄的掛載點(diǎn),以便返回有效的文件路徑。設(shè)置debug標(biāo)志關(guān)閉此行為。
  • mark:在目錄匹配中添加/。注意,這需要額外的stat調(diào)用。
  • nosort:結(jié)果不排序。
  • stat:設(shè)置true統(tǒng)計(jì)stat所有結(jié)果。它可能會(huì)降低性能,并且完全沒必要, 除非readdir認(rèn)為文件存在的不可靠標(biāo)志。
  • silent:讀取目錄遇到異常錯(cuò)誤,并向stderr打印報(bào)警信息。設(shè)置optionsilent,關(guān)閉警告信息。
  • strict:嘗試讀取目錄遇到異常錯(cuò)誤時(shí),進(jìn)行會(huì)繼續(xù)搜索其他匹配項(xiàng)。設(shè)置strict后,當(dāng)出現(xiàn)這些情況時(shí)會(huì)引發(fā)錯(cuò)誤。
  • cache 可以看上同的cache屬性。傳入之前生成的緩存對(duì)象保存一些fs調(diào)用。
  • statCache:文件系統(tǒng)信息結(jié)果的緩存,防止不必要的stat調(diào)用。 通常不需要設(shè)置它,如果你知道文件系統(tǒng)不會(huì)在調(diào)用中改變,你可以將statCache從一個(gè)glob()中調(diào)用傳遞給另一個(gè)的options對(duì)象中。
  • symlinks 已知符號(hào)鏈接的緩存。在解析**匹配時(shí),你可以傳入上一次生成的符號(hào)鏈接對(duì)象用來保存stat調(diào)用。
  • sync 棄用:使用glob.sync(pattern, opts)替代。
  • nounique:在一些情況中,{}模式會(huì)導(dǎo)致同一個(gè)文件在結(jié)果中出現(xiàn)多次。默認(rèn)情況下,它會(huì)防止結(jié)果中出現(xiàn)重復(fù)值。設(shè)置這個(gè)屬性會(huì)關(guān)閉這個(gè)行為。
  • nonull:設(shè)置不返回空數(shù)組,而是返回一個(gè)包含模式本身的數(shù)組。這是glob(3)中的默認(rèn)值。
  • debug:開啟后會(huì)在minimatch和glob開啟日志記錄。
  • nobrace:不展開大括號(hào),如{a,b}和{1..3}。
  • noglobstar:針對(duì)多個(gè)文件名不匹配**(即 會(huì)替換為正常的*)。
  • noext:不去匹配+(a|b)“extglob”模式。
  • nocase:不區(qū)分大小寫的匹配。注意:在一些不區(qū)分大小寫的系統(tǒng)中no-magic模式默認(rèn)會(huì)被匹配,stat和readir將不會(huì)引發(fā)錯(cuò)誤。
  • matchBase:如果模式中不包含/字符串,則執(zhí)行僅基于basename匹配。也就是說*.js會(huì)被視為**/*.js,會(huì)匹配所有目錄下的所有js。
  • nodir:只匹配文件,不匹配目錄。 (注意:只匹配目錄,只需要在模式的最后加上/)
  • ignore:添加模式或glob模式的數(shù)組去排除匹配。注意,ignore模式下總是dot:true,其他設(shè)置無效。
  • follow:**模式下,訪問符號(hào)鏈接目錄。注意 它可能會(huì)導(dǎo)致在出現(xiàn)循環(huán)鏈接時(shí)出現(xiàn)大量重復(fù)引用。
  • realpath:設(shè)置為true會(huì)在所有結(jié)果中調(diào)用fs.realpath。在無法解析的符號(hào)鏈接下,返回匹配結(jié)果的完整絕對(duì)路徑。(雖然它通常是一個(gè)失效的符號(hào)鏈接)
  • absolute:設(shè)置為真,將會(huì)在匹配的結(jié)果中接收到絕對(duì)路徑。與realpath不同,它也會(huì)影響match事件中的返回值。

博客名稱:王樂平博客

CSDN博客地址:http://blog.csdn.net/lecepin

本作品采用知識(shí)共享署名-非商業(yè)性使用-禁止演繹 4.0 國際許可協(xié)議進(jìn)行許可。

總結(jié)

以上是生活随笔為你收集整理的Glob Patterns匹配模式使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。