Um utilitário de correspondência mínimo.
Esta é a biblioteca correspondente usada internamente pelo npm.
Ele funciona convertendo expressões glob em objetos JavaScript RegExp
.
// módulo híbrido, carregue com require() ou 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, e barulhento!
Suporta estes recursos globais:
Expansão de cinta
Correspondência glob estendida
"Globstar" **
correspondente
Classes de caracteres Posix, como [[:alpha:]]
, suportando toda a gama de caracteres Unicode. Por exemplo, [[:alpha:]]
corresponderá a 'é'
, embora [a-zA-Z]
não. A correspondência de símbolos e conjuntos de agrupamento não é suportada, portanto [[=e=]]
não corresponderá 'é'
e [[.ch.]]
não corresponderá 'ch'
em localidades onde ch
é considerado um único caractere.
Ver:
man sh
man bash
Correspondência de padrões
man 3 fnmatch
man 5 gitignore
Por favor, use apenas barras em expressões glob.
Embora o Windows use /
ou como separador de caminho, apenas os caracteres /
são usados por esta implementação glob. Você deve usar barras somente em expressões glob. As barras invertidas nos padrões sempre serão interpretadas como caracteres de escape, não como separadores de caminho.
Observe que ou /
será interpretado como separadores de caminho em caminhos no Windows e corresponderá a /
em expressões glob.
Então sempre use /
em padrões.
No Windows, caminhos UNC como //?/c:/...
ou //ComputerName/Share/...
são tratados especialmente.
Os padrões que começam com uma barra dupla seguida por alguns caracteres sem barra preservarão sua barra dupla. Como resultado, um padrão como //*
corresponderá //x
, mas não /x
.
Padrões começando com //?/<drive letter>:
não tratarão o ?
como um caractere curinga. Em vez disso, será tratado como uma string normal.
Padrões começando com //?/<drive letter>:/...
corresponderão aos caminhos de arquivo começando com <drive letter>:/...
, e vice-versa, como se //?/
não estivesse presente. Esse comportamento só está presente quando as letras da unidade não diferenciam maiúsculas de minúsculas entre si. As partes restantes do caminho/padrão são comparadas com distinção entre maiúsculas e minúsculas, a menos que nocase:true
esteja definido.
Observe que especificar um caminho UNC usando caracteres como separadores de caminho é sempre permitido no argumento do caminho do arquivo, mas só é permitido no argumento padrão quando windowsPathsNoEscape: true
estiver definido nas opções.
Crie um objeto minimatch instanciando a classe minimatch.Minimatch
.
var Minimatch = require('minimatch').Minimatchvar mm = new Minimatch(padrão, opções)
pattern
O padrão original que o objeto minimatch representa.
options
As opções fornecidas ao construtor.
set
Uma matriz bidimensional de expressões regulares ou de string. Cada linha na matriz corresponde a um padrão expandido por colchetes. Cada item na linha corresponde a uma única parte do caminho. Por exemplo, o padrão {a,b/c}/d
se expandiria para um conjunto de padrões como:
[ [ a, d ] , [ b, c, d ] ]
Se uma parte do padrão não tiver nenhuma "mágica" (isto é, é algo como "foo"
em vez de fo*o?
), então ele será deixado como uma string em vez de convertido em uma expressão regular.
regexp
Criado pelo método makeRe
. Uma única expressão regular que expressa todo o padrão. Isso é útil nos casos em que você deseja usar um padrão semelhante fnmatch(3)
com FNM_PATH
ativado.
negate
Verdadeiro se o padrão for negado.
comment
Verdadeiro se o padrão for um comentário.
empty
Verdadeiro se o padrão for ""
.
makeRe()
Gere o membro regexp
se necessário e retorne-o. Retornará false
se o padrão for inválido.
match(fname)
Retorna verdadeiro se o nome do arquivo corresponder ao padrão, ou falso caso contrário.
matchOne(fileArray, patternArray, partial)
Pegue um nome de arquivo /
-split e compare-o com uma única linha no regExpSet
. Este método é principalmente para uso interno, mas é exposto para que possa ser usado por um glob-walker que precisa evitar chamadas excessivas ao sistema de arquivos.
hasMagic()
Retorna verdadeiro se o padrão analisado contiver algum caractere mágico. Retorna falso se todas as partes do comparador forem literais de string. Se a opção magicalBraces
estiver definida no construtor, ele considerará como mágicas as expansões de chaves que não são mágicas. Se não for definido, um padrão como a{b,c}d
retornará false
, porque nem abd
nem acd
contêm caracteres glob especiais.
Isso não significa que a string padrão possa ser usada como um nome de arquivo literal, pois pode conter caracteres glob mágicos que são escapados. Por exemplo, o padrão *
ou [*]
não seria considerado mágico, pois a parte correspondente é analisada para a string literal '*'
e corresponderia a um caminho chamado '*'
, não '*'
ou '[*]'
. O método minimatch.unescape()
pode ser usado para remover caracteres de escape.
Todos os outros métodos são internos e serão chamados conforme necessário.
Exportação principal. Testa um caminho em relação ao padrão usando as opções.
var isJS = minimatch(arquivo, '*.js', { matchBase: true })
Retorna uma função que testa seu argumento fornecido, adequada para uso com Array.filter
. Exemplo:
var javascripts = fileList.filter(minimatch.filter('*.js', { matchBase: true }))
Escape de todos os caracteres mágicos em um padrão glob, para que ele corresponda apenas a strings literais
Se a opção windowsPathsNoEscape
for usada, os caracteres serão escapados agrupando-os em []
, porque um caractere mágico agrupado em uma classe de caractere só pode ser satisfeito por esse caractere exato.
Barras (e barras invertidas no modo windowsPathsNoEscape
) não podem ter escape ou não.
Cancele o escape de uma string glob que pode conter alguns caracteres de escape.
Se a opção windowsPathsNoEscape
for usada, os escapes entre colchetes serão removidos, mas não os escapes com barra invertida. Por exemplo, ele transformará a string '[*]'
em *
, mas não transformará '*'
em '*'
, porque é um separador de caminho no modo windowsPathsNoEscape
.
Quando windowsPathsNoEscape
não estiver definido, os escapes de chave e de barra invertida serão removidos.
Barras (e barras invertidas no modo windowsPathsNoEscape
) não podem ter escape ou não.
Combine com a lista de arquivos, no estilo fnmatch ou glob. Se nada corresponder e options.nonull estiver definido, retorne uma lista contendo o próprio padrão.
var javascripts = minimatch.match(fileList, '*.js', { matchBase: true })
Faça um objeto de expressão regular a partir do padrão.
Todas as opções são false
por padrão.
Jogue uma tonelada de coisas no stderr.
Não expanda os conjuntos de chaves {a,b}
e {1..3}
.
Desative **
a correspondência com vários nomes de pastas.
Permitir que os padrões correspondam aos nomes de arquivos começando com um ponto final, mesmo que o padrão não tenha explicitamente um ponto final naquele local.
Observe que, por padrão, a/**/b
não corresponderá a/.d/b
, a menos que dot
seja definido.
Desative padrões de estilo "extglob" como +(a|b)
.
Execute uma correspondência sem distinção entre maiúsculas e minúsculas.
Quando usado com {nocase: true}
, crie expressões regulares que não diferenciam maiúsculas de minúsculas, mas deixe as partes de correspondência de string intactas. Não tem efeito quando usado sem {nocase: true}
Útil quando alguma outra forma de correspondência sem distinção entre maiúsculas e minúsculas é usada ou se a representação da string original for útil de alguma outra forma.
Quando uma correspondência não for encontrada por minimatch.match
, retorne uma lista contendo o próprio padrão se esta opção estiver definida. Quando não definido, uma lista vazia será retornada se não houver correspondências.
Isso afeta apenas os resultados do método Minimatch.hasMagic
.
Se o padrão contiver expansões de chaves, como a{b,c}d
, mas nenhum outro caractere mágico, o método Minimatch.hasMagic()
retornará false
por padrão. Quando esta opção for definida, ela retornará true
para expansão de chaves, bem como para outros caracteres glob mágicos.
Se definido, os padrões sem barras serão comparados ao nome base do caminho se ele contiver barras. Por exemplo, a?b
corresponderia ao caminho /xyz/123/acb
, mas não /xyz/acb/123
.
Suprima o comportamento de tratar #
no início de um padrão como um comentário.
Suprimir o comportamento de tratar um líder !
personagem como negação.
Retorna de expressões negativas como se não tivessem sido negadas. (Ou seja, verdadeiro em caso de acerto, falso em caso de erro.)
Compare um caminho parcial com um padrão. Contanto que as partes do caminho presentes não sejam contrariadas pelo padrão, ele será tratado como uma correspondência. Isso é útil em aplicativos onde você está percorrendo uma estrutura de pastas e ainda não tem o caminho completo, mas deseja garantir que não percorrerá caminhos que nunca poderão corresponder.
Por exemplo,
minimatch('/a/b', '/a/*/c/d', { parcial: true }) // verdadeiro, pode ser /a/b/c/dminimatch('/a/b', '/ **/d', { parcial: verdadeiro }) // verdadeiro, pode ser /a/b/.../dminimatch('/x/y/z', '/a/**/z', { parcial : verdadeiro }) // falso, porque x !== um
Use apenas como separador de caminho e nunca como caractere de escape. Se definido, todos os caracteres
serão substituídos por
/
no padrão. Observe que isso torna impossível a correspondência com caminhos contendo caracteres literais de padrão glob, mas permite a correspondência com padrões construídos usando path.join()
e path.resolve()
em plataformas Windows, imitando o comportamento (buggy!) de versões anteriores no Windows. . Use com cuidado e esteja atento às advertências sobre os caminhos do Windows.
Por motivos herdados, isso também será definido se options.allowWindowsEscape
estiver definido com o valor exato false
.
Quando um padrão começa com um caminho UNC ou letra de unidade e no modo nocase:true
, não converta as partes raiz do padrão em uma expressão regular que não diferencia maiúsculas de minúsculas e, em vez disso, deixe-as como strings.
Este é o padrão quando a plataforma é win32
e nocase:true
está definido.
Por padrão, vários caracteres /
(além do //
inicial em um caminho UNC, consulte "Caminhos UNC" acima) são tratados como um único /
.
Ou seja, um padrão como a///b
corresponderá ao caminho do arquivo a/b
.
Defina preserveMultipleSlashes: true
para suprimir esse comportamento.
Um número que indica o nível de otimização que deve ser feito no padrão antes de analisá-lo e usá-lo para correspondências.
As partes Globstar **
são sempre convertidas em *
quando noglobstar
é definido, e múltiplas partes **
adjacentes são convertidas em uma única **
(ou seja, a/**/**/b
será tratado como a/**/b
, pois isso é equivalente em todos os casos).
0
- Não faça mais alterações. Neste modo, .
e ..
são mantidos no padrão, o que significa que eles também devem aparecer na mesma posição na sequência do caminho de teste. Por exemplo, um padrão como a/*/../c
corresponderá à string a/b/../c
, mas não à string a/c
.
1
- (padrão) Remova os casos em que um ponto duplo ..
segue uma parte do padrão que não é **
, .
, ..
ou vazio ''
. Por exemplo, o padrão ./a/b/../*
é convertido em ./a/*
e, portanto, corresponderá à string do caminho ./a/c
, mas não à string do caminho ./a/b/../c
. Os pontos e partes vazias do caminho no padrão são preservados.
2
(ou superior) – Otimizações muito mais agressivas, adequadas para uso em casos de movimentação de arquivos:
Embora essas otimizações melhorem o desempenho de casos de uso de movimentação de arquivos, como glob (ou seja, a razão pela qual este módulo existe), há casos em que ele não conseguirá corresponder a uma string literal que teria sido correspondida no nível de otimização 1 ou 0.
Especificamente, embora o método Minimatch.match()
otimize a sequência do caminho do arquivo da mesma maneira, resultando nas mesmas correspondências, ele falhará quando testado com a expressão regular fornecida por Minimatch.makeRe()
, a menos que a sequência do caminho seja a primeira processado com minimatch.levelTwoFileOptimize()
ou similar.
Remova os casos em que um ponto duplo ..
segue uma parte do padrão que não é **
, .
, ou vazio ''
. Remova vazio e .
partes do padrão, onde for seguro fazê-lo (ou seja, em qualquer lugar que não seja a última posição, a primeira posição ou a segunda posição em um padrão começando com /
, pois isso pode indicar um caminho UNC no Windows).
Converta padrões contendo <pre>/**/../<p>/<rest>
no equivalente <pre>/{..,**}/<p>/<rest>
, onde <p>
é um padrão a porção diferente de .
, ..
, **
ou vazio ''
.
Padrões de desduplicação em que uma parte **
está presente em um e é omitida em outro, e não é a parte do caminho final e, de outra forma, são equivalentes. Então {a/**/b,a/b}
se torna a/**/b
, porque **
corresponde a uma parte vazia do caminho.
Padrões de desduplicação em que uma parte *
está presente em um e um padrão sem pontos diferente de **
, .
, ..
ou ''
está na mesma posição no outro. Então a/{*,x}/b
se torna a/*/b
, porque *
pode corresponder a x
.
Quando definido como win32
, isso acionará todos os comportamentos específicos do Windows (manipulação especial para caminhos UNC e tratamento como separadores em caminhos de arquivo para comparação).
O padrão é o valor de process.platform
.
Embora a conformidade estrita com os padrões existentes seja uma meta válida, existem algumas discrepâncias entre o minimatch e outras implementações. Alguns são intencionais e alguns são inevitáveis.
Se o padrão começar com !
personagem, então ele é negado. Defina o sinalizador nonegate
para suprimir esse comportamento e trate o lead !
personagens normalmente. Isso talvez seja relevante se você deseja iniciar o padrão com um padrão extglob negativo como !(a|B)
. Múltiplo !
caracteres no início de um padrão negarão o padrão várias vezes.
Se um padrão começar com #
, ele será tratado como um comentário e não corresponderá a nada. Use #
para corresponder a um literal #
no início de uma linha ou defina o sinalizador nocomment
para suprimir esse comportamento.
O caractere de estrela dupla **
é suportado por padrão, a menos que o sinalizador noglobstar
esteja definido. Isso é suportado da mesma forma que bsdglob e bash 4.1, onde **
só tem significado especial se for a única coisa em uma parte do caminho. Ou seja, a/**/b
corresponderá a/x/y/b
, mas a/**b
não.
Se um padrão de escape não tiver correspondências e o sinalizador nonull
estiver definido, então minimatch.match retornará o padrão conforme fornecido, em vez de interpretar os escapes de caracteres. Por exemplo, minimatch.match([], "*a?")
retornará "*a?"
em vez de "*a?"
. Isso é semelhante a definir a opção nullglob
no bash, exceto que ela não resolve caracteres de padrão de escape.
Se a expansão de chaves não estiver desabilitada, ela será executada antes de qualquer outra interpretação do padrão glob. Assim, um padrão como +(a|{b),c)}
, que não seria válido em bash ou zsh, é expandido primeiro no conjunto de +(a|b)
e +(a|c)
, e aqueles os padrões são verificados quanto à validade. Como esses dois são válidos, a correspondência prossegue.
Os padrões extglob negados são tratados o mais próximo possível da semântica Bash, mas há alguns casos com extglobs negativos que são extremamente difíceis de expressar em uma expressão regular JavaScript. Em particular, o padrão negado <start>!(<pattern>*|)*
irá no bash corresponder a qualquer coisa que não comece com <start><pattern>
. No entanto, <start>!(<pattern>*)*
corresponderá aos caminhos que começam com <start><pattern>
, porque a string vazia pode corresponder à parte negada. Nesta biblioteca, <start>!(<pattern>*|)*
não corresponderá a nenhum padrão começando com <start>
, devido a uma diferença precisamente em quais padrões são considerados "gananciosos" em Expressões Regulares versus expansão de caminho bash. Isto pode ser solucionável, mas não sem incorrer em alguma complexidade e custos de desempenho, e parece não valer a pena buscar o compromisso.
Observe que fnmatch(3)
na libc é um comparador de strings extremamente ingênuo, que não faz nada de especial para barras. Esta biblioteca foi projetada para ser usada em pesquisas globais e caminhantes de arquivos e, portanto, faz coisas especiais com /
. Portanto, foo*
não corresponderá foo/bar
nesta biblioteca, mesmo que correspondesse a fnmatch(3)
.