Una utilidad de coincidencia mínima.
Esta es la biblioteca coincidente utilizada internamente por npm.
Funciona convirtiendo expresiones globales en objetos JavaScript RegExp
.
// módulo híbrido, cargar con require() o importimport { minimatch } de 'minimatch'// o:const { minimatch } = require('minimatch')minimatch('bar.foo', '*.foo') // true!minimatch('bar.foo', '*.bar') // false!minimatch('bar.foo', '*.+(bar|foo)', { debug: true }) // true, y ¡ruidoso!
Admite estas características globales:
Expansión de llaves
Coincidencia global extendida
"Globstar" **
coincidencia
Clases de caracteres Posix, como [[:alpha:]]
, que admiten toda la gama de caracteres Unicode. Por ejemplo, [[:alpha:]]
coincidirá con 'é'
, aunque [a-zA-Z]
no. No se admite la comparación de símbolos y conjuntos de clasificación, por lo que [[=e=]]
no coincidirá con 'é'
y [[.ch.]]
no coincidirá con 'ch'
en configuraciones regionales donde ch
se considera un solo carácter.
Ver:
man sh
coincidencia de patrones man bash
man 3 fnmatch
man 5 gitignore
Utilice únicamente barras diagonales en expresiones globales.
Aunque Windows utiliza /
o como separador de ruta, esta implementación global solo utiliza los caracteres /
. Debe utilizar barras diagonales sólo en expresiones globales. Las barras invertidas en los patrones siempre se interpretarán como caracteres de escape, no como separadores de ruta.
Tenga en cuenta que o /
se interpretará como separadores de ruta en las rutas de Windows y coincidirá con /
en expresiones globales.
Así que siempre usa /
en patrones.
En Windows, las rutas UNC como //?/c:/...
o //ComputerName/Share/...
se manejan de forma especial.
Los patrones que comienzan con una doble barra seguida de algunos caracteres sin barra conservarán su doble barra. Como resultado, un patrón como //*
coincidirá con //x
, pero no con /x
.
Patrones que comienzan con //?/<drive letter>:
¿no tratarán el ?
como carácter comodín. En cambio, será tratada como una cadena normal.
Los patrones que comienzan con //?/<drive letter>:/...
coincidirán con las rutas de archivo que comienzan con <drive letter>:/...
y viceversa, como si //?/
no estuviera presente. Este comportamiento solo está presente cuando las letras de unidad no distinguen entre mayúsculas y minúsculas. Las partes restantes de la ruta/patrón se comparan distinguiendo entre mayúsculas y minúsculas, a menos que se establezca nocase:true
.
Tenga en cuenta que siempre se permite especificar una ruta UNC usando caracteres como separadores de ruta en el argumento de ruta del archivo, pero solo se permite en el argumento de patrón cuando windowsPathsNoEscape: true
está configurado en las opciones.
Cree un objeto minimatch creando una instancia de la clase minimatch.Minimatch
.
var Minimatch = require('minimatch').Minimatchvar mm = nuevo Minimatch(patrón, opciones)
pattern
El patrón original que representa el objeto minimatch.
options
Las opciones proporcionadas al constructor.
set
Una matriz bidimensional de expresiones regulares o de cadena. Cada fila de la matriz corresponde a un patrón expandido con llaves. Cada elemento de la fila corresponde a una única parte del camino. Por ejemplo, el patrón {a,b/c}/d
se expandiría a un conjunto de patrones como:
[ [ a, d ] , [ b, c, d ] ]
Si una parte del patrón no tiene ninguna "magia" (es decir, es algo así como "foo"
en lugar de fo*o?
), entonces se dejará como una cadena en lugar de convertirse en una expresión regular.
regexp
Creado por el método makeRe
. Una única expresión regular que expresa todo el patrón. Esto es útil en los casos en los que desea utilizar un patrón parecido a fnmatch(3)
con FNM_PATH
habilitado.
negate
Verdadero si se niega el patrón.
comment
Verdadero si el patrón es un comentario.
empty
Verdadero si el patrón es ""
.
makeRe()
Genera el miembro regexp
si es necesario y lo devuelve. Devolverá false
si el patrón no es válido.
match(fname)
Devuelve verdadero si el nombre del archivo coincide con el patrón, o falso en caso contrario.
matchOne(fileArray, patternArray, partial)
Tome un nombre de archivo dividido en /
y compárelo con una sola fila en regExpSet
. Este método es principalmente para uso interno, pero está expuesto para que pueda ser utilizado por un glob-walker que necesite evitar llamadas excesivas al sistema de archivos.
hasMagic()
Devuelve verdadero si el patrón analizado contiene caracteres mágicos. Devuelve falso si todas las partes del comparador son cadenas literales. Si la opción magicalBraces
está configurada en el constructor, entonces considerará mágicas las expansiones de llaves que de otro modo no serían mágicas. Si no se establece, entonces un patrón como a{b,c}d
devolverá false
, porque ni abd
ni acd
contienen caracteres globales especiales.
Esto no significa que la cadena de patrón pueda usarse como un nombre de archivo literal, ya que puede contener caracteres glob mágicos con escape. Por ejemplo, no se consideraría que el patrón *
o [*]
tenga magia, ya que la parte coincidente se analiza en la cadena literal '*'
y coincidiría con una ruta denominada '*'
, no '*'
o '[*]'
. El método minimatch.unescape()
se puede utilizar para eliminar caracteres de escape.
Todos los demás métodos son internos y se llamarán según sea necesario.
Exportación principal. Prueba una ruta contra el patrón usando las opciones.
var isJS = minimatch(archivo, '*.js', {matchBase: true })
Devuelve una función que prueba el argumento proporcionado, adecuada para usar con Array.filter
. Ejemplo:
var javascripts = fileList.filter(minimatch.filter('*.js', { matchBase: true }))
Escapar de todos los caracteres mágicos en un patrón global, de modo que solo coincida con cadenas literales
Si se usa la opción windowsPathsNoEscape
, los caracteres se escapan envolviéndolos en []
, porque un carácter mágico envuelto en una clase de carácter solo puede satisfacerse con ese carácter exacto.
Las barras diagonales (y las barras invertidas en el modo windowsPathsNoEscape
) no se pueden eliminar ni eliminar.
Quite el escape de una cadena global que pueda contener algunos caracteres de escape.
Si se utiliza la opción windowsPathsNoEscape
, se eliminan los escapes de llave cuadrada, pero no los de barra invertida. Por ejemplo, convertirá la cadena '[*]'
en *
, pero no convertirá '*'
en '*'
, porque es un separador de ruta en el modo windowsPathsNoEscape
.
Cuando no se establece windowsPathsNoEscape
, se eliminan tanto los escapes de llave como los de barra invertida.
Las barras diagonales (y las barras invertidas en el modo windowsPathsNoEscape
) no se pueden eliminar ni eliminar.
Haga coincidir la lista de archivos, al estilo de fnmatch o glob. Si no hay nada que coincida y se establece options.nonull, se devuelve una lista que contiene el patrón en sí.
var javascripts = minimatch.match(fileList, '*.js', { matchBase: true })
Crea un objeto de expresión regular a partir del patrón.
Todas las opciones son false
de forma predeterminada.
Tira un montón de cosas a stderr.
No expanda los conjuntos de llaves {a,b}
y {1..3}
.
Deshabilite la coincidencia **
con varios nombres de carpetas.
Permita que los patrones coincidan con nombres de archivos que comiencen con un punto, incluso si el patrón no tiene explícitamente un punto en ese lugar.
Tenga en cuenta que, de forma predeterminada, a/**/b
no coincidirá con a/.d/b
, a menos que se establezca dot
.
Deshabilite los patrones de estilo "extglob" como +(a|b)
.
Realice una coincidencia que no distinga entre mayúsculas y minúsculas.
Cuando se usa con {nocase: true}
, cree expresiones regulares que no distingan entre mayúsculas y minúsculas, pero deje intactas las partes de coincidencia de cadenas. No tiene ningún efecto cuando se usa sin {nocase: true}
Útil cuando se utiliza alguna otra forma de coincidencia que no distingue entre mayúsculas y minúsculas, o si la representación de cadena original es útil de alguna otra manera.
Cuando minimatch.match
no encuentra una coincidencia, devuelve una lista que contiene el patrón en sí si esta opción está configurada. Cuando no se establece, se devuelve una lista vacía si no hay coincidencias.
Esto sólo afecta los resultados del método Minimatch.hasMagic
.
Si el patrón contiene expansiones de llaves, como a{b,c}d
, pero ningún otro carácter mágico, entonces el método Minimatch.hasMagic()
devolverá false
de forma predeterminada. Cuando se establece esta opción, volverá a ser true
para la expansión de llaves, así como para otros personajes de globos mágicos.
Si se establece, los patrones sin barras se compararán con el nombre base de la ruta si contiene barras. Por ejemplo, a?b
coincidiría con la ruta /xyz/123/acb
, pero no con /xyz/acb/123
.
Suprime el comportamiento de tratar #
al inicio de un patrón como un comentario.
¡Suprima el comportamiento de tratar a un líder !
carácter como negación.
Las expresiones de negación devuelven lo mismo que si no fueran negadas. (Es decir, verdadero en un acierto, falso en un fallo).
Compare una ruta parcial con un patrón. Siempre que las partes del camino que están presentes no se contradigan con el patrón, se tratará como una coincidencia. Esto es útil en aplicaciones en las que estás recorriendo una estructura de carpetas y aún no tienes la ruta completa, pero quieres asegurarte de no recorrer rutas que nunca podrán coincidir.
Por ejemplo,
minimatch('/a/b', '/a/*/c/d', { parcial: verdadero }) // verdadero, podría ser /a/b/c/dminimatch('/a/b', '/ **/d', { parcial: verdadero }) // verdadero, podría ser /a/b/.../dminimatch('/x/y/z', '/a/**/z', { parcial : verdadero }) // falso, porque x !== a
Utilice sólo como separador de ruta y nunca como carácter de escape. Si se establece, todos los caracteres
se reemplazan con
/
en el patrón. Tenga en cuenta que esto hace que sea imposible comparar rutas que contengan caracteres de patrón global literal, pero permite comparar patrones creados usando path.join()
y path.resolve()
en plataformas Windows, imitando el comportamiento (¡con errores!) de versiones anteriores en Windows. . Úselo con precaución y tenga en cuenta la advertencia sobre las rutas de Windows.
Por motivos heredados, esto también se establece si options.allowWindowsEscape
se establece en el valor exacto false
.
Cuando un patrón comienza con una ruta UNC o letra de unidad, y en modo nocase:true
, no convierta las partes raíz del patrón en una expresión regular que no distinga entre mayúsculas y minúsculas y, en su lugar, déjelas como cadenas.
Este es el valor predeterminado cuando la plataforma es win32
y nocase:true
está configurado.
De forma predeterminada, varios caracteres /
(distintos del //
inicial en una ruta UNC, consulte "Rutas UNC" más arriba) se tratan como un único /
.
Es decir, un patrón como a///b
coincidirá con la ruta del archivo a/b
.
Establezca preserveMultipleSlashes: true
para suprimir este comportamiento.
Un número que indica el nivel de optimización que se debe realizar en el patrón antes de analizarlo y usarlo para coincidencias.
Las partes de Globstar **
siempre se convierten a *
cuando se establece noglobstar
, y varias partes **
adyacentes se convierten en una sola **
(es decir, a/**/**/b
se tratará como a/**/b
, ya que esto es equivalente en todos los casos).
0
: no realizar más cambios. En este modo, .
y ..
se mantienen en el patrón, lo que significa que también deben aparecer en la misma posición en la cadena de ruta de prueba. Por ejemplo, un patrón como a/*/../c
coincidirá con la cadena a/b/../c
pero no con la cadena a/c
.
1
- (predeterminado) Elimina los casos en los que un punto doble ..
sigue una parte del patrón que no es **
.
, ..
, o vacío ''
. Por ejemplo, el patrón ./a/b/../*
se convierte a ./a/*
, por lo que coincidirá con la cadena de ruta ./a/c
, pero no con la cadena de ruta ./a/b/../c
. Se conservan los puntos y las partes de trazado vacías del patrón.
2
(o superior): optimizaciones mucho más agresivas, adecuadas para usar con casos de recorrido de archivos:
Si bien estas optimizaciones mejoran el rendimiento de los casos de uso de recorrido de archivos como glob (es decir, la razón por la que existe este módulo), hay casos en los que no podrá coincidir con una cadena literal que habría coincidido en el nivel de optimización 1 o 0.
Específicamente, si bien el método Minimatch.match()
optimizará la cadena de ruta del archivo de la misma manera, dando como resultado las mismas coincidencias, fallará cuando se pruebe con la expresión regular proporcionada por Minimatch.makeRe()
, a menos que la cadena de ruta sea la primera. procesado con minimatch.levelTwoFileOptimize()
o similar.
Elimine los casos en los que un punto doble ..
sigue una parte del patrón que no es **
.
, o vacío ''
. Retire vacío y .
partes del patrón, cuando sea seguro hacerlo (es decir, en cualquier lugar que no sea la última posición, la primera posición o la segunda posición en un patrón que comienza con /
, ya que esto puede indicar una ruta UNC en Windows).
Convierta patrones que contengan <pre>/**/../<p>/<rest>
en el equivalente <pre>/{..,**}/<p>/<rest>
, donde <p>
es un patrón porción distinta a .
, ..
, **
o vacío ''
.
Patrones de deduplicación donde una porción **
está presente en uno y se omite en otro, y no es la porción de ruta final, y por lo demás son equivalentes. Entonces {a/**/b,a/b}
se convierte en a/**/b
, porque **
coincide con una parte de la ruta vacía.
Deduplica patrones donde una porción *
está presente en uno y un patrón sin puntos distinto de **
.
, ..
, o ''
está en la misma posición en el otro. Entonces a/{*,x}/b
se convierte en a/*/b
, porque *
puede coincidir con x
.
Cuando se establece en win32
, esto activará todos los comportamientos específicos de Windows (manejo especial para rutas UNC y tratamiento como separadores en rutas de archivos para comparación).
El valor predeterminado es el valor de process.platform
.
Si bien el cumplimiento estricto de los estándares existentes es un objetivo que vale la pena, existen algunas discrepancias entre minimatch y otras implementaciones. Algunas son intencionales y otras son inevitables.
Si el patrón comienza con !
carácter, entonces se niega. Establezca el indicador nonegate
para suprimir este comportamiento y trate el líder !
personajes normalmente. Esto quizás sea relevante si desea comenzar el patrón con un patrón extglob negativo como !(a|B)
. ¡Múltiples !
Los caracteres al comienzo de un patrón negarán el patrón varias veces.
Si un patrón comienza con #
, se trata como un comentario y no coincidirá con nada. Utilice #
para hacer coincidir un #
literal al comienzo de una línea, o establezca el indicador nocomment
para suprimir este comportamiento.
El carácter de doble estrella **
se admite de forma predeterminada, a menos que esté configurado el indicador noglobstar
. Esto se admite a la manera de bsdglob y bash 4.1, donde **
solo tiene un significado especial si es lo único en una parte de la ruta. Es decir, a/**/b
coincidirá con a/x/y/b
, pero a/**b
no.
Si un patrón de escape no tiene coincidencias y se establece el indicador nonull
, minimatch.match devuelve el patrón tal como se proporciona, en lugar de interpretar los caracteres de escape. Por ejemplo, minimatch.match([], "*a?")
devolverá "*a?"
en lugar de "*a?"
. Esto es similar a configurar la opción nullglob
en bash, excepto que no resuelve caracteres de patrón de escape.
Si la expansión de llaves no está deshabilitada, se realiza antes de cualquier otra interpretación del patrón global. Por lo tanto, un patrón como +(a|{b),c)}
, que no sería válido en bash o zsh, se expande primero al conjunto de +(a|b)
y +(a|c)
, y esos Se comprueba la validez de los patrones. Dado que esos dos son válidos, se procede al emparejamiento.
Los patrones de extglob negativos se manejan lo más cerca posible de la semántica de Bash, pero hay algunos casos con extglobs negativos que son extremadamente difíciles de expresar en una expresión regular de JavaScript. En particular, el patrón negado <start>!(<pattern>*|)*
coincidirá en bash con cualquier cosa que no comience con <start><pattern>
. Sin embargo, <start>!(<pattern>*)*
coincidirá con rutas que comiencen con <start><pattern>
, porque la cadena vacía puede coincidir con la parte negada. En esta biblioteca, <start>!(<pattern>*|)*
no coincidirá con ningún patrón que comience con <start>
, debido a una diferencia en precisamente qué patrones se consideran "codiciosos" en las expresiones regulares frente a la expansión de ruta de bash. Esto puede tener solución, pero no sin incurrir en cierta complejidad y costos de rendimiento, y parece que no vale la pena intentar hacer esta compensación.
Tenga en cuenta que fnmatch(3)
en libc es un comparador de cadenas extremadamente ingenuo, que no hace nada especial con las barras. Esta biblioteca está diseñada para usarse en búsquedas globales y recorridos de archivos, por lo que hace cosas especiales con /
. Por lo tanto, foo*
no coincidirá con foo/bar
en esta biblioteca, aunque sí lo haría en fnmatch(3)
.