Utilitas pencocokan minimal.
Ini adalah perpustakaan yang cocok yang digunakan secara internal oleh npm.
Ia bekerja dengan mengubah ekspresi glob menjadi objek JavaScript RegExp
.
// modul hybrid, muat dengan require() atau importimport { minimatch } from 'minimatch'// atau:const { minimatch } = require('minimatch')minimatch('bar.foo', '*.foo') // true!minimatch('bar.foo', '*.bar') // false!minimatch('bar.foo', '*.+(bar|foo)', { debug: true }) // benar, dan bising!
Mendukung fitur glob ini:
Ekspansi Penjepit
Pencocokan glob yang diperluas
"Globstar" **
cocok
Kelas karakter Posix, seperti [[:alpha:]]
, mendukung seluruh karakter Unicode. Misalnya, [[:alpha:]]
akan cocok dengan 'é'
, meskipun [a-zA-Z]
tidak. Menyusun simbol dan pencocokan himpunan tidak didukung, jadi [[=e=]]
tidak akan cocok dengan 'é'
dan [[.ch.]]
tidak akan cocok dengan 'ch'
di lokal di mana ch
dianggap sebagai karakter tunggal.
Melihat:
man sh
man bash
Pencocokan Pola
man 3 fnmatch
man 5 gitignore
Harap hanya gunakan garis miring ke depan dalam ekspresi glob.
Meskipun windows menggunakan /
atau sebagai pemisah jalurnya, hanya karakter /
yang digunakan dalam implementasi glob ini. Anda harus menggunakan garis miring hanya dalam ekspresi glob. Garis miring ke belakang dalam pola akan selalu diartikan sebagai karakter pelarian, bukan pemisah jalur.
Perhatikan bahwa atau /
akan ditafsirkan sebagai pemisah jalur di jalur pada Windows, dan akan cocok dengan /
dalam ekspresi glob.
Jadi selalu gunakan /
dalam pola.
Di Windows, jalur UNC seperti //?/c:/...
atau //ComputerName/Share/...
ditangani secara khusus.
Pola yang dimulai dengan garis miring ganda diikuti oleh beberapa karakter non-garis miring akan mempertahankan garis miring gandanya. Hasilnya, pola seperti //*
akan cocok //x
, tetapi tidak /x
.
Pola yang menatap //?/<drive letter>:
tidak akan menangani ?
sebagai karakter wildcard. Sebaliknya, ini akan diperlakukan sebagai string normal.
Pola yang dimulai dengan //?/<drive letter>:/...
akan cocok dengan jalur file yang dimulai dengan <drive letter>:/...
, dan sebaliknya, seolah-olah //?/
tidak ada. Perilaku ini hanya muncul jika huruf kandar tidak membedakan huruf besar dan kecil satu sama lain. Bagian jalur/pola yang tersisa dibandingkan dengan peka huruf besar/kecil, kecuali nocase:true
disetel.
Perhatikan bahwa menentukan jalur UNC menggunakan karakter sebagai pemisah jalur selalu diperbolehkan dalam argumen jalur file, tetapi hanya diperbolehkan dalam argumen pola ketika windowsPathsNoEscape: true
diatur dalam opsi.
Buat objek minimatch dengan membuat instance kelas minimatch.Minimatch
.
var Minimatch = memerlukan('minimatch').Minimatchvar mm = Minimatch baru(pola, opsi)
pattern
Pola asli yang diwakili oleh objek minimatch.
options
Opsi yang diberikan ke konstruktor.
set
Array 2 dimensi ekspresi regexp atau string. Setiap baris dalam array sesuai dengan pola kurung kurawal yang diperluas. Setiap item dalam baris berhubungan dengan satu bagian jalur. Misalnya, pola {a,b/c}/d
akan diperluas menjadi sekumpulan pola seperti:
[ [ a, d ] , [ b, c, d ] ]
Jika sebagian dari pola tidak memiliki "keajaiban" apa pun di dalamnya (yaitu, seperti "foo"
dan bukan fo*o?
), maka itu akan dibiarkan sebagai string dan bukannya dikonversi ke ekspresi reguler.
regexp
Dibuat dengan metode makeRe
. Ekspresi reguler tunggal yang mengekspresikan keseluruhan pola. Ini berguna jika Anda ingin menggunakan pola seperti fnmatch(3)
dengan FNM_PATH
diaktifkan.
negate
Benar jika polanya dinegasikan.
comment
Benar jika polanya adalah komentar.
empty
Benar jika polanya adalah ""
.
makeRe()
Hasilkan anggota regexp
jika perlu, dan kembalikan. Akan mengembalikan false
jika polanya tidak valid.
match(fname)
Mengembalikan nilai true jika nama file cocok dengan polanya, atau false jika sebaliknya.
matchOne(fileArray, patternArray, partial)
Ambil /
-split nama file, dan cocokkan dengan satu baris di regExpSet
. Metode ini terutama untuk penggunaan internal, namun diekspos sehingga dapat digunakan oleh glob-walker yang perlu menghindari panggilan sistem file yang berlebihan.
hasMagic()
Mengembalikan nilai benar jika pola yang diurai berisi karakter ajaib apa pun. Mengembalikan nilai salah jika semua bagian pembanding adalah string literal. Jika opsi magicalBraces
disetel pada konstruktor, maka ia akan menganggap ekspansi brace yang tidak bersifat magis menjadi ajaib. Jika tidak disetel, maka pola seperti a{b,c}d
akan mengembalikan false
, karena baik abd
maupun acd
tidak berisi karakter glob khusus apa pun.
Ini tidak berarti bahwa string pola dapat digunakan sebagai nama file literal, karena mungkin berisi karakter glob ajaib yang di-escape. Misalnya, pola *
atau [*]
tidak akan dianggap memiliki keajaiban, karena bagian yang cocok diurai menjadi string literal '*'
dan akan cocok dengan jalur bernama '*'
, bukan '*'
atau '[*]'
. Metode minimatch.unescape()
dapat digunakan untuk menghapus karakter escape.
Semua metode lainnya bersifat internal, dan akan dipanggil jika diperlukan.
Ekspor utama. Menguji jalur terhadap pola menggunakan opsi.
var isJS = minimatch(file, '*.js', { matchBase: benar })
Mengembalikan fungsi yang menguji argumen yang diberikan, cocok untuk digunakan dengan Array.filter
. Contoh:
var javascripts = fileList.filter(minimatch.filter('*.js', { matchBase: true }))
Keluarkan semua karakter ajaib dalam pola glob, sehingga hanya akan cocok dengan string literal
Jika opsi windowsPathsNoEscape
digunakan, maka karakter akan di-escape dengan membungkus []
, karena karakter ajaib yang dibungkus dalam kelas karakter hanya dapat dipenuhi oleh karakter tersebut.
Garis miring (dan garis miring terbalik dalam mode windowsPathsNoEscape
) tidak dapat di-escape atau tidak dapat di-escape.
Batalkan pelolosan string glob yang mungkin berisi beberapa karakter yang lolos.
Jika opsi windowsPathsNoEscape
digunakan, maka pelolosan kurung kurawal persegi akan dihapus, namun tidak pelolosan garis miring terbalik. Misalnya, ini akan mengubah string '[*]'
menjadi *
, tetapi tidak akan mengubah '*'
menjadi '*'
, karena merupakan pemisah jalur dalam mode windowsPathsNoEscape
.
Jika windowsPathsNoEscape
tidak disetel, maka pelolosan kurung kurawal dan garis miring terbalik akan dihapus.
Garis miring (dan garis miring terbalik dalam mode windowsPathsNoEscape
) tidak dapat di-escape atau tidak dapat di-escape.
Cocokkan dengan daftar file, dengan gaya fnmatch atau glob. Jika tidak ada yang cocok, dan options.nonull disetel, kembalikan daftar yang berisi pola itu sendiri.
var javascripts = minimatch.match(fileList, '*.js', { matchBase: true })
Buatlah objek ekspresi reguler dari polanya.
Semua opsi false
secara default.
Buang banyak barang ke stderr.
Jangan memperluas set kurung kurawal {a,b}
dan {1..3}
.
Nonaktifkan **
pencocokan terhadap beberapa nama folder.
Izinkan pola untuk mencocokkan nama file yang dimulai dengan titik, meskipun pola tersebut tidak secara eksplisit memiliki titik pada titik tersebut.
Perhatikan bahwa secara default, a/**/b
tidak akan cocok dengan a/.d/b
, kecuali dot
disetel.
Nonaktifkan pola gaya "extglob" seperti +(a|b)
.
Lakukan pencocokan yang tidak peka huruf besar-kecil.
Saat digunakan dengan {nocase: true}
, buat ekspresi reguler yang tidak peka huruf besar-kecil, namun biarkan bagian pencocokan string tidak tersentuh. Tidak berpengaruh bila digunakan tanpa {nocase: true}
Berguna ketika beberapa bentuk pencocokan case-sensitive lainnya digunakan, atau jika representasi string asli berguna dalam beberapa cara lain.
Jika kecocokan tidak ditemukan oleh minimatch.match
, kembalikan daftar yang berisi pola itu sendiri jika opsi ini disetel. Jika tidak disetel, daftar kosong akan dikembalikan jika tidak ada kecocokan.
Ini hanya mempengaruhi hasil metode Minimatch.hasMagic
.
Jika pola berisi ekspansi kurung kurawal, seperti a{b,c}d
, tetapi tidak ada karakter ajaib lainnya, maka metode Minimatch.hasMagic()
akan mengembalikan false
secara default. Saat opsi ini disetel, opsi ini akan mengembalikan true
untuk ekspansi brace serta karakter glob ajaib lainnya.
Jika disetel, pola tanpa garis miring akan dicocokkan dengan nama dasar jalur jika berisi garis miring. Misalnya, a?b
akan cocok dengan jalur /xyz/123/acb
, tetapi tidak /xyz/acb/123
.
Menekan perilaku memperlakukan #
di awal pola sebagai komentar.
Menekan perilaku memperlakukan pemimpin !
karakter sebagai negasi.
Pengembalian dari ekspresi negasi sama seperti jika tidak dinegasikan. (Yaitu, benar jika mengenai sasaran, salah bila meleset.)
Bandingkan sebagian jalur dengan suatu pola. Selama bagian-bagian jalur yang ada tidak bertentangan dengan polanya, maka akan dianggap cocok. Ini berguna dalam aplikasi di mana Anda menelusuri struktur folder, dan belum memiliki jalur lengkap, namun ingin memastikan bahwa Anda tidak menelusuri jalur yang tidak akan pernah cocok.
Misalnya,
minimatch('/a/b', '/a/*/c/d', { parsial: benar }) // benar, mungkin /a/b/c/dminimatch('/a/b', '/ **/d', { parsial: benar }) // benar, mungkin /a/b/.../dminimatch('/x/y/z', '/a/**/z', { parsial : benar }) // salah, karena x !== a
Gunakan sebagai pemisah jalur saja , dan jangan pernah sebagai karakter pelarian. Jika disetel, semua karakter
diganti dengan
/
dalam pola. Perhatikan bahwa hal ini membuat tidak mungkin untuk mencocokkan jalur yang berisi karakter pola glob literal, namun memungkinkan pencocokan dengan pola yang dibuat menggunakan path.join()
dan path.resolve()
pada platform Windows, meniru perilaku (kereta!) versi sebelumnya pada Windows . Harap gunakan dengan hati-hati, dan perhatikan peringatan tentang jalur Windows.
Untuk alasan lama, ini juga disetel jika options.allowWindowsEscape
disetel ke nilai yang tepat false
.
Ketika sebuah pola dimulai dengan jalur UNC atau huruf kandar, dan dalam mode nocase:true
, jangan ubah bagian akar pola menjadi ekspresi reguler yang tidak peka huruf besar-kecil, dan biarkan sebagai string.
Ini adalah default ketika platformnya adalah win32
dan nocase:true
disetel.
Secara default, beberapa karakter /
(selain karakter //
di jalur UNC, lihat "Jalur UNC" di atas) diperlakukan sebagai satu /
.
Artinya, pola seperti a///b
akan cocok dengan jalur file a/b
.
Setel preserveMultipleSlashes: true
untuk menekan perilaku ini.
Angka yang menunjukkan tingkat pengoptimalan yang harus dilakukan pada pola sebelum diurai dan digunakan untuk pencocokan.
Bagian Globstar **
selalu dikonversi menjadi *
ketika noglobstar
disetel, dan beberapa bagian **
yang berdekatan diubah menjadi satu **
(yaitu, a/**/**/b
akan diperlakukan sebagai a/**/b
, karena ini setara dalam semua kasus).
0
- Tidak melakukan perubahan lebih lanjut. Dalam mode ini, .
dan ..
dipertahankan dalam pola, artinya keduanya juga harus muncul di posisi yang sama dalam string jalur pengujian. Misalnya, pola seperti a/*/../c
akan cocok dengan string a/b/../c
tetapi tidak dengan string a/c
.
1
- (default) Hapus kasus di mana titik ganda ..
mengikuti bagian pola yang bukan **
, .
, ..
, atau kosong ''
. Misalnya, pola ./a/b/../*
diubah menjadi ./a/*
, sehingga akan cocok dengan string jalur ./a/c
, tetapi tidak dengan string jalur ./a/b/../c
. Titik dan bagian jalur kosong dalam pola dipertahankan.
2
(atau lebih tinggi) - Pengoptimalan yang jauh lebih agresif, cocok untuk digunakan dengan kasus penelusuran file:
Meskipun pengoptimalan ini meningkatkan kinerja kasus penggunaan penelusuran file seperti glob (yaitu alasan keberadaan modul ini), ada beberapa kasus di mana ia gagal mencocokkan string literal yang seharusnya cocok di pengoptimalan tingkat 1 atau 0.
Khususnya, meskipun metode Minimatch.match()
akan mengoptimalkan string jalur file dengan cara yang sama, sehingga menghasilkan kecocokan yang sama, metode ini akan gagal saat diuji dengan ekspresi reguler yang disediakan oleh Minimatch.makeRe()
, kecuali jika string jalurnya adalah yang pertama diproses dengan minimatch.levelTwoFileOptimize()
atau serupa.
Hapus kasus di mana titik ganda ..
mengikuti bagian pola yang bukan **
, .
, atau kosong ''
. Hapus kosong dan .
bagian dari pola, yang aman untuk dilakukan (yaitu, di mana pun selain posisi terakhir, posisi pertama, atau posisi kedua dalam pola yang dimulai dengan /
, karena ini mungkin menunjukkan jalur UNC di Windows).
Ubah pola yang mengandung <pre>/**/../<p>/<rest>
menjadi <pre>/{..,**}/<p>/<rest>
yang setara, dengan <p>
adalah pola a porsi selain .
, ..
, **
, atau kosong ''
.
Pola dedupe yang mana bagian **
ada di satu bagian dan dihilangkan di bagian jalur lain, dan ini bukan bagian jalur akhir, dan sebaliknya pola tersebut setara. Jadi {a/**/b,a/b}
menjadi a/**/b
, karena **
cocok dengan bagian jalur yang kosong.
Pola dedupe di mana bagian *
ada dalam satu, dan pola non-titik selain **
, .
, ..
, atau ''
berada pada posisi yang sama di posisi lainnya. Jadi a/{*,x}/b
menjadi a/*/b
, karena *
bisa menandingi x
.
Jika disetel ke win32
, ini akan memicu semua perilaku khusus Windows (penanganan khusus untuk jalur UNC, dan memperlakukan sebagai pemisah jalur file untuk perbandingan.)
Defaultnya adalah nilai process.platform
.
Meskipun kepatuhan yang ketat terhadap standar yang ada merupakan tujuan yang bermanfaat, terdapat beberapa perbedaan antara minimatch dan penerapan lainnya. Ada yang disengaja, dan ada pula yang tidak bisa dihindari.
Jika polanya dimulai dengan !
karakter, maka dinegasikan. Setel tanda nonegate
untuk menekan perilaku ini, dan perlakukan lead !
karakter secara normal. Ini mungkin relevan jika Anda ingin memulai pola dengan pola extglob negatif seperti !(a|B)
. Banyak !
karakter di awal suatu pola akan meniadakan pola tersebut beberapa kali.
Jika suatu pola dimulai dengan #
, maka pola tersebut dianggap sebagai komentar, dan tidak akan cocok dengan apa pun. Gunakan #
untuk mencocokkan #
literal di awal baris, atau setel tanda nocomment
untuk menyembunyikan perilaku ini.
Karakter bintang ganda **
didukung secara default, kecuali jika bendera noglobstar
disetel. Hal ini didukung dengan cara bsdglob dan bash 4.1, di mana **
hanya memiliki arti khusus jika itu adalah satu-satunya hal di bagian jalur. Artinya, a/**/b
akan cocok dengan a/x/y/b
, tetapi a/**b
tidak.
Jika pola yang di-escape tidak memiliki kecocokan, dan tanda nonull
disetel, maka minimatch.match akan mengembalikan pola seperti yang disediakan, alih-alih menafsirkan pelolosan karakter. Misalnya, minimatch.match([], "*a?")
akan mengembalikan "*a?"
daripada "*a?"
. Ini mirip dengan menyetel opsi nullglob
di bash, kecuali opsi ini tidak menyelesaikan karakter pola yang lolos.
Jika ekspansi brace tidak dinonaktifkan, maka ekspansi tersebut dilakukan sebelum interpretasi lain dari pola glob. Jadi, pola seperti +(a|{b),c)}
, yang tidak valid di bash atau zsh, diperluas terlebih dahulu ke dalam himpunan +(a|b)
dan +(a|c)
, dan pola tersebut pola diperiksa validitasnya. Karena keduanya valid, pencocokan dilanjutkan.
Pola extglob yang dinegasikan ditangani sedekat mungkin dengan semantik Bash, namun ada beberapa kasus dengan extglob negatif yang sangat sulit diungkapkan dalam ekspresi reguler JavaScript. Khususnya pola yang dinegasikan <start>!(<pattern>*|)*
di bash akan cocok dengan apa pun yang tidak dimulai dengan <start><pattern>
. Namun, <start>!(<pattern>*)*
akan mencocokkan jalur yang dimulai dengan <start><pattern>
, karena string kosong dapat cocok dengan bagian yang dinegasikan. Di perpustakaan ini, <start>!(<pattern>*|)*
tidak akan cocok dengan pola apa pun yang dimulai dengan <start>
, karena perbedaan pola mana yang dianggap "serakah" dalam Ekspresi Reguler vs perluasan jalur bash. Hal ini mungkin dapat diperbaiki, namun bukan tanpa menimbulkan kompleksitas dan biaya kinerja, dan trade-off ini tampaknya tidak layak untuk dilakukan.
Perhatikan bahwa fnmatch(3)
di libc adalah pencocokan perbandingan string yang sangat naif, yang tidak melakukan sesuatu yang khusus untuk garis miring. Pustaka ini dirancang untuk digunakan dalam pencarian glob dan penjelajah file, sehingga ia melakukan hal-hal khusus dengan /
. Jadi, foo*
tidak akan cocok dengan foo/bar
di perpustakaan ini, meskipun cocok dengan fnmatch(3)
.