Ein minimales Matching-Dienstprogramm.
Dies ist die passende Bibliothek, die intern von npm verwendet wird.
Es funktioniert durch die Konvertierung von Glob-Ausdrücken in JavaScript- RegExp
Objekte.
// Hybridmodul, laden mit require() oder importimport { minimatch } from 'minimatch'// or:const { minimatch } = require('minimatch')minimatch('bar.foo', '*.foo') // true!minimatch('bar.foo', '*.bar') // false!minimatch('bar.foo', '*.+(bar|foo)', { debug: true }) // true, und laut!
Unterstützt diese globalen Funktionen:
Klammererweiterung
Erweiterter Glob-Matching
„Globstar“ **
passend
Posix-Zeichenklassen wie [[:alpha:]]
, die den gesamten Bereich der Unicode-Zeichen unterstützen. Beispielsweise stimmt [[:alpha:]]
mit 'é'
überein, [a-zA-Z]
jedoch nicht. Das Sortieren von Symbol- und Satzübereinstimmungen wird nicht unterstützt, daher stimmt [[=e=]]
nicht mit 'é'
überein und [[.ch.]]
stimmt nicht mit 'ch'
in Gebietsschemas überein, in denen ch
als einzelnes Zeichen betrachtet wird.
Sehen:
man sh
man bash
Mustervergleich
man 3 fnmatch
man 5 gitignore
Bitte verwenden Sie in Glob-Ausdrücken nur Schrägstriche.
Obwohl Windows entweder /
oder als Pfadtrennzeichen verwendet, werden in dieser Glob-Implementierung nur /
-Zeichen verwendet. Sie dürfen Schrägstriche nur in Glob-Ausdrücken verwenden. Backslashes in Mustern werden immer als Escape-Zeichen und nicht als Pfadtrennzeichen interpretiert.
Beachten Sie, dass oder /
als Pfadtrennzeichen in Pfaden unter Windows interpretiert wird und mit /
in Glob-Ausdrücken übereinstimmt.
Verwenden Sie also immer /
in Mustern.
Unter Windows werden UNC-Pfade wie //?/c:/...
oder //ComputerName/Share/...
speziell behandelt.
Muster, die mit einem doppelten Schrägstrich beginnen, gefolgt von einigen Nicht-Schrägstrich-Zeichen, behalten ihren doppelten Schrägstrich bei. Infolgedessen passt ein Muster wie //*
zu //x
, aber nicht zu /x
.
Muster, die mit //?/<drive letter>:
werden das ?
nicht behandeln. als Platzhalterzeichen. Stattdessen wird es als normale Zeichenfolge behandelt.
Muster, die mit //?/<drive letter>:/...
beginnen, stimmen mit Dateipfaden überein, die mit <drive letter>:/...
beginnen, und umgekehrt, als ob //?/
nicht vorhanden wäre. Dieses Verhalten tritt nur dann auf, wenn die Laufwerksbuchstaben ohne Berücksichtigung der Groß-/Kleinschreibung übereinstimmen. Die verbleibenden Teile des Pfads/Musters werden unter Berücksichtigung der Groß-/Kleinschreibung verglichen, es sei denn, nocase:true
ist festgelegt.
Beachten Sie, dass die Angabe eines UNC-Pfads mit Zeichen als Pfadtrennzeichen im Dateipfadargument immer zulässig ist, im Musterargument jedoch nur, wenn in den Optionen windowsPathsNoEscape: true
festgelegt ist.
Erstellen Sie ein Minimatch-Objekt, indem Sie die Klasse minimatch.Minimatch
instanziieren.
var Minimatch = require('minimatch').Minimatchvar mm = neues Minimatch(Muster, Optionen)
pattern
Das ursprüngliche Muster, das das Minimatch-Objekt darstellt.
options
Die dem Konstruktor bereitgestellten Optionen.
set
Ein zweidimensionales Array von regulären Ausdrücken oder Zeichenfolgenausdrücken. Jede Zeile im Array entspricht einem Muster mit erweiterten Klammern. Jedes Element in der Zeile entspricht einem einzelnen Pfadteil. Beispielsweise würde sich das Muster {a,b/c}/d
zu einer Reihe von Mustern wie den folgenden erweitern:
[ [ a, d ] , [ b, c, d ] ]
Wenn ein Teil des Musters keine „Magie“ enthält (das heißt, es ist so etwas wie "foo"
statt fo*o?
), dann wird es als Zeichenfolge belassen und nicht in einen regulären Ausdruck konvertiert.
regexp
Erstellt von der makeRe
-Methode. Ein einzelner regulärer Ausdruck, der das gesamte Muster ausdrückt. Dies ist in Fällen nützlich, in denen Sie das Muster ähnlich wie fnmatch(3)
mit aktiviertem FNM_PATH
verwenden möchten.
negate
True, wenn das Muster negiert wird.
comment
True, wenn das Muster ein Kommentar ist.
empty
True, wenn das Muster ""
ist.
makeRe()
Generiert bei Bedarf das regexp
Mitglied und gibt es zurück. Gibt false
zurück, wenn das Muster ungültig ist.
match(fname)
Gibt „true“ zurück, wenn der Dateiname mit dem Muster übereinstimmt, andernfalls „false“.
matchOne(fileArray, patternArray, partial)
Nehmen Sie einen /
-split-Dateinamen und gleichen Sie ihn mit einer einzelnen Zeile im regExpSet
ab. Diese Methode dient hauptsächlich der internen Verwendung, wird jedoch offengelegt, sodass sie von einem Glob-Walker verwendet werden kann, der übermäßige Dateisystemaufrufe vermeiden muss.
hasMagic()
Gibt true zurück, wenn das analysierte Muster magische Zeichen enthält. Gibt „false“ zurück, wenn alle Komparatorteile Zeichenfolgenliterale sind. Wenn die Option magicalBraces
im Konstruktor festgelegt ist, werden Klammererweiterungen, die ansonsten nicht magisch sind, als magisch betrachtet. Wenn nicht festgelegt, gibt ein Muster wie a{b,c}d
false
zurück, da weder abd
noch acd
spezielle Glob-Zeichen enthalten.
Dies bedeutet nicht , dass die Musterzeichenfolge als wörtlicher Dateiname verwendet werden kann, da sie magische Glob-Zeichen enthalten kann, die maskiert sind. Beispielsweise würde das Muster *
oder [*]
nicht als magisch angesehen werden, da der übereinstimmende Teil in die Literalzeichenfolge '*'
analysiert wird und mit einem Pfad mit dem Namen '*'
und nicht mit '*'
oder '[*]'
übereinstimmen würde. '[*]'
. Die Methode minimatch.unescape()
kann zum Entfernen von Escape-Zeichen verwendet werden.
Alle anderen Methoden sind intern und werden bei Bedarf aufgerufen.
Hauptexport. Testet mithilfe der Optionen einen Pfad anhand des Musters.
var isJS = minimatch(file, '*.js', { matchBase: true })
Gibt eine Funktion zurück, die ihr bereitgestelltes Argument testet und für die Verwendung mit Array.filter
geeignet ist. Beispiel:
var javascripts = fileList.filter(minimatch.filter('*.js', { matchBase: true }))
Escape alle magischen Zeichen in einem Glob-Muster, sodass immer nur Literalzeichenfolgen gefunden werden
Wenn die Option windowsPathsNoEscape
verwendet wird, werden Zeichen durch Umbrechen mit []
maskiert, da ein in eine Zeichenklasse eingeschlossenes magisches Zeichen nur durch genau dieses Zeichen erfüllt werden kann.
Schrägstriche (und umgekehrte Schrägstriche im windowsPathsNoEscape
Modus) können nicht maskiert oder nicht maskiert werden.
Entfernen Sie das Escapezeichen für eine Glob-Zeichenfolge, die möglicherweise einige Escapezeichen enthält.
Wenn die Option windowsPathsNoEscape
verwendet wird, werden Escapezeichen in eckigen Klammern entfernt, nicht jedoch Backslash-Escapezeichen. Beispielsweise wird die Zeichenfolge '[*]'
in *
umgewandelt, '*'
jedoch nicht in '*'
, da es sich um ein Pfadtrennzeichen im windowsPathsNoEscape
-Modus handelt.
Wenn windowsPathsNoEscape
nicht festgelegt ist, werden sowohl Klammer-Escapezeichen als auch Backslash-Escapezeichen entfernt.
Schrägstriche (und umgekehrte Schrägstriche im windowsPathsNoEscape
Modus) können nicht maskiert oder nicht maskiert werden.
Abgleich mit der Dateiliste im Stil von fnmatch oder glob. Wenn nichts übereinstimmt und options.nonull festgelegt ist, wird eine Liste zurückgegeben, die das Muster selbst enthält.
var javascripts = minimatch.match(fileList, '*.js', { matchBase: true })
Erstellen Sie aus dem Muster ein reguläres Ausdrucksobjekt.
Alle Optionen sind standardmäßig false
.
Legen Sie eine Menge Zeug auf stderr ab.
Erweitern Sie die Klammersätze {a,b}
und {1..3}
nicht.
Deaktivieren Sie **
Vergleich mit mehreren Ordnernamen.
Zulassen, dass Muster Dateinamen abgleichen, die mit einem Punkt beginnen, auch wenn das Muster an dieser Stelle nicht explizit einen Punkt enthält.
Beachten Sie, dass a/**/b
standardmäßig nicht mit a/.d/b
übereinstimmt, es sei denn, dot
ist festgelegt.
Deaktivieren Sie „extglob“-Stilmuster wie +(a|b)
.
Führen Sie einen Vergleich ohne Berücksichtigung der Groß- und Kleinschreibung durch.
Erstellen Sie bei Verwendung mit {nocase: true}
reguläre Ausdrücke, bei denen die Groß-/Kleinschreibung nicht beachtet wird, aber die Zeichenfolgenübereinstimmungsteile unberührt bleiben. Hat keine Wirkung, wenn es ohne {nocase: true}
verwendet wird
Nützlich, wenn eine andere Form der Übereinstimmung ohne Berücksichtigung der Groß- und Kleinschreibung verwendet wird oder wenn die ursprüngliche Zeichenfolgendarstellung auf andere Weise nützlich ist.
Wenn minimatch.match
keine Übereinstimmung findet, wird eine Liste zurückgegeben, die das Muster selbst enthält, wenn diese Option festgelegt ist. Wenn es nicht festgelegt ist, wird eine leere Liste zurückgegeben, wenn keine Übereinstimmungen vorhanden sind.
Dies wirkt sich nur auf die Ergebnisse der Minimatch.hasMagic
-Methode aus.
Wenn das Muster Klammererweiterungen wie a{b,c}d
, aber keine anderen magischen Zeichen enthält, gibt die Methode Minimatch.hasMagic()
standardmäßig false
zurück. Wenn diese Option festgelegt ist, wird für die Klammererweiterung sowie für andere Magic-Glob-Zeichen true
zurückgegeben.
Wenn festgelegt, werden Muster ohne Schrägstriche mit dem Basisnamen des Pfads abgeglichen, wenn dieser Schrägstriche enthält. Beispielsweise würde a?b
mit dem Pfad /xyz/123/acb
übereinstimmen, aber nicht mit /xyz/acb/123
.
Unterdrücken Sie das Verhalten, bei dem #
am Anfang eines Musters als Kommentar behandelt wird.
Unterdrücken Sie das Verhalten einer führenden Person !
Charakter als Negation.
Gibt von negierten Ausdrücken dasselbe zurück, als ob sie nicht negiert worden wären. (Das heißt, wahr bei einem Treffer, falsch bei einem Fehlschlag.)
Vergleichen Sie einen Teilpfad mit einem Muster. Solange die vorhandenen Teile des Pfads nicht durch das Muster im Widerspruch stehen, wird es als Übereinstimmung behandelt. Dies ist in Anwendungen nützlich, in denen Sie durch eine Ordnerstruktur gehen und noch nicht über den vollständigen Pfad verfügen, aber sicherstellen möchten, dass Sie keine Pfade durchlaufen, die niemals übereinstimmen können.
Zum Beispiel,
minimatch('/a/b', '/a/*/c/d', { partial: true }) // wahr, könnte /a/b/c/d seinminimatch('/a/b', '/ **/d', { teilweise: wahr }) // wahr, könnte /a/b/.../dminimatch('/x/y/z', '/a/**/z', { teilweise sein : true }) // false, weil x !== a
Verwenden Sie nur als Pfadtrennzeichen und niemals als Escape-Zeichen. Wenn festgelegt, werden alle
-Zeichen im Muster durch
/
ersetzt. Beachten Sie, dass dies den Abgleich mit Pfaden, die literale Glob-Musterzeichen enthalten, unmöglich macht, aber den Abgleich mit Mustern ermöglicht, die mit path.join()
und path.resolve()
auf Windows-Plattformen erstellt wurden, was das (fehlerhafte!) Verhalten früherer Versionen unter Windows nachahmt . Bitte verwenden Sie es mit Vorsicht und beachten Sie den Vorbehalt bezüglich der Windows-Pfade.
Aus Legacy-Gründen wird dies auch festgelegt, wenn options.allowWindowsEscape
auf den genauen Wert false
gesetzt ist.
Wenn ein Muster mit einem UNC-Pfad oder einem Laufwerksbuchstaben beginnt und im nocase:true
-Modus ist, konvertieren Sie die Stammteile des Musters nicht in einen regulären Ausdruck, bei dem die Groß-/Kleinschreibung nicht berücksichtigt wird, sondern belassen Sie sie stattdessen als Zeichenfolgen.
Dies ist die Standardeinstellung, wenn die Plattform win32
ist und nocase:true
festgelegt ist.
Standardmäßig werden mehrere /
-Zeichen (außer dem führenden //
in einem UNC-Pfad, siehe „UNC-Pfade“ oben) als einzelnes /
behandelt.
Das heißt, ein Muster wie a///b
passt zum Dateipfad a/b
.
Legen Sie preserveMultipleSlashes: true
fest, um dieses Verhalten zu unterdrücken.
Eine Zahl, die den Optimierungsgrad angibt, der am Muster vorgenommen werden sollte, bevor es analysiert und für Übereinstimmungen verwendet wird.
Globstar-Teile **
werden immer in *
konvertiert, wenn noglobstar
festgelegt ist, und mehrere benachbarte **
Teile werden in einen einzigen **
umgewandelt (d. h. a/**/**/b
wird als a/**/b
behandelt, da dies in allen Fällen gleichwertig ist).
0
– Keine weiteren Änderungen vornehmen. In diesem Modus, .
und ..
werden im Muster beibehalten, was bedeutet, dass sie auch in der Testpfadzeichenfolge an derselben Position erscheinen müssen. Beispielsweise stimmt ein Muster wie a/*/../c
mit der Zeichenfolge a/b/../c
überein, nicht jedoch mit der Zeichenfolge a/c
.
1
– (Standard) Entfernen Sie Fälle, in denen ein Doppelpunkt ..
einem Musterabschnitt folgt, der nicht **
, ist .
, ..
oder leer ''
. Beispielsweise wird das Muster ./a/b/../*
in ./a/*
konvertiert und stimmt daher mit der Pfadzeichenfolge ./a/c
überein, nicht jedoch mit der Pfadzeichenfolge ./a/b/../c
. Punkte und leere Pfadabschnitte im Muster bleiben erhalten.
2
(oder höher) – Viel aggressivere Optimierungen, geeignet für die Verwendung bei File-Walking-Fällen:
Während diese Optimierungen die Leistung von File-Walking-Anwendungsfällen wie Glob verbessern (d. h. der Grund, warum dieses Modul existiert), gibt es Fälle, in denen es nicht mit einer Literalzeichenfolge übereinstimmt, die in Optimierungsstufe 1 oder 0 abgeglichen worden wäre.
Insbesondere optimiert die Minimatch.match()
Methode die Dateipfadzeichenfolge auf die gleiche Art und Weise, was zu denselben Übereinstimmungen führt. Sie schlägt jedoch fehl, wenn sie mit dem von Minimatch.makeRe()
bereitgestellten regulären Ausdruck getestet wird, es sei denn, die Pfadzeichenfolge steht an erster Stelle verarbeitet mit minimatch.levelTwoFileOptimize()
oder ähnlichem.
Entfernen Sie Fälle, in denen ein Doppelpunkt ..
einem Musterabschnitt folgt, der nicht **
, ist .
, oder leer ''
. Leeres entfernen und .
Teile des Musters, wo dies sicher ist (d. h. an einer anderen Stelle als der letzten Position, der ersten Position oder der zweiten Position in einem Muster, das mit /
beginnt, da dies unter Windows auf einen UNC-Pfad hinweisen kann).
Konvertieren Sie Muster, <pre>/**/../<p>/<rest>
enthalten, in das entsprechende <pre>/{..,**}/<p>/<rest>
, wobei <p>
ein Muster ist Teil anders als .
, ..
, **
oder leer ''
.
Deduplizierungsmuster, bei denen ein **
Abschnitt in einem vorhanden ist und in einem anderen weggelassen wird und es sich nicht um den endgültigen Pfadabschnitt handelt und sie ansonsten gleichwertig sind. {a/**/b,a/b}
wird also zu a/**/b
, weil **
mit einem leeren Pfadabschnitt übereinstimmt.
Deduplizierungsmuster, bei denen ein *
-Anteil in einem vorhanden ist, und ein Nicht-Punktmuster außer **
, .
, ..
, oder ''
befindet sich im anderen an der gleichen Position. Also wird a/{*,x}/b
zu a/*/b
, weil *
mit x
übereinstimmen kann.
Bei der Einstellung win32
löst dies alle Windows-spezifischen Verhaltensweisen aus (spezielle Behandlung für UNC-Pfade und Behandlung als Trennzeichen in Dateipfaden zum Vergleich).
Der Standardwert ist der Wert von process.platform
.
Während die strikte Einhaltung der bestehenden Standards ein lohnendes Ziel ist, bestehen einige Diskrepanzen zwischen Minimatch und anderen Implementierungen. Einige sind beabsichtigt, andere sind unvermeidbar.
Wenn das Muster mit einem !
beginnt Zeichen, dann wird es negiert. Setzen Sie das nonegate
-Flag, um dieses Verhalten zu unterdrücken, und behandeln Sie führendes !
Zeichen normalerweise. Dies ist möglicherweise relevant, wenn Sie das Muster mit einem negativen Extglob-Muster wie !(a|B)
beginnen möchten. Mehrere !
Zeichen am Anfang eines Musters negieren das Muster mehrmals.
Wenn ein Muster mit #
beginnt, wird es als Kommentar behandelt und findet keine Übereinstimmung. Verwenden Sie #
, um ein Literal #
am Anfang einer Zeile abzugleichen, oder setzen Sie das nocomment
Flag, um dieses Verhalten zu unterdrücken.
Das Doppelsternzeichen **
wird standardmäßig unterstützt, es sei denn, das noglobstar
-Flag ist gesetzt. Dies wird in der Art von bsdglob und Bash 4.1 unterstützt, wobei **
nur dann eine besondere Bedeutung hat, wenn es das einzige Ding in einem Pfadteil ist. Das heißt, a/**/b
stimmt mit a/x/y/b
überein, a/**b
jedoch nicht.
Wenn ein Escape-Muster keine Übereinstimmungen aufweist und das nonull
-Flag gesetzt ist, gibt minimatch.match das bereitgestellte Muster zurück, anstatt die Zeichen-Escapes zu interpretieren. Beispielsweise gibt minimatch.match([], "*a?")
"*a?"
zurück. statt "*a?"
. Dies ähnelt dem Festlegen der nullglob
-Option in der Bash, außer dass dadurch maskierte Musterzeichen nicht aufgelöst werden.
Wenn die Klammererweiterung nicht deaktiviert ist, wird sie vor jeder anderen Interpretation des Glob-Musters durchgeführt. Daher wird ein Muster wie +(a|{b),c)}
, das in Bash oder ZSH nicht gültig wäre, zuerst in die Menge von +(a|b)
und +(a|c)
und diesen erweitert Muster werden auf Gültigkeit überprüft. Da diese beiden gültig sind, erfolgt die Zuordnung.
Negierte Extglob-Muster werden so nah wie möglich an der Bash-Semantik behandelt, es gibt jedoch einige Fälle mit negativen Extglobs, die äußerst schwierig in einem regulären JavaScript-Ausdruck auszudrücken sind. Insbesondere das negierte Muster <start>!(<pattern>*|)*
passt in der Bash zu allem, was nicht mit <start><pattern>
beginnt. <start>!(<pattern>*)*
stimmt jedoch mit Pfaden überein, die mit <start><pattern>
beginnen, da die leere Zeichenfolge mit dem negierten Teil übereinstimmen kann. In dieser Bibliothek stimmt <start>!(<pattern>*|)*
mit keinem Muster überein, das mit <start>
beginnt, da ein Unterschied darin besteht, welche Muster in regulären Ausdrücken und der Bash-Pfaderweiterung genau als „gierig“ gelten. Dies kann möglicherweise behoben werden, allerdings nicht ohne einige Komplexitäts- und Leistungskosten, und der Kompromiss scheint sich nicht zu lohnen.
Beachten Sie, dass fnmatch(3)
in libc ein äußerst naiver String-Vergleichs-Matcher ist, der keine besonderen Aktionen für Schrägstriche durchführt. Diese Bibliothek ist für die Verwendung bei der globalen Suche und bei Datei-Walkern konzipiert und führt daher spezielle Aufgaben mit /
aus. Daher stimmt foo*
in dieser Bibliothek nicht mit foo/bar
überein, obwohl dies in fnmatch(3)
der Fall wäre.