
braces 3.0.3 licenciado sob MIT com backport de profundidade revisado para CVE-2026-93687; consumo apenas fixado
Expansão de chaves no estilo Bash, implementada em JavaScript. Mais segura que outras bibliotecas de expansão de chaves, com suporte completo à especificação de chaves do Bash 4.3, sem sacrificar o desempenho.
Considere seguir o autor deste projeto, Jon Schlinkert, e considere dar uma estrela ao projeto para mostrar seu ❤️ e apoio.
Instale com npm:
$ npm install --save braces
Consulte o changelog para mais detalhes.
Os padrões de chaves tornam os globs mais poderosos ao adicionar a capacidade de corresponder a intervalos e sequências específicas de caracteres.
a/{b,c}/d => ['a/b/d', 'a/c/d']{01..03} => ['01', '02', '03']{2..10..2} => ['2', '4', '6', '8', '10']A exportação principal é uma função que recebe um ou mais patterns de chaves e options.
const braces = require('braces');
// braces(patterns[, options]);
console.log(braces(['{01..05}', '{a..e}']));
//=> ['(0[1-5])', '([a-e])']
console.log(braces(['{01..05}', '{a..e}'], { expand: true }));
//=> ['01', '02', '03', '04', '05', 'a', 'b', 'c', 'd', 'e']
Por padrão, os padrões de chaves são compilados em strings otimizadas para criar expressões regulares e realizar correspondências.
Compilado
console.log(braces('a/{x,y,z}/b'));
//=> ['a/(x|y|z)/b']
console.log(braces(['a/{01..20}/b', 'a/{1..5}/b']));
//=> [ 'a/(0[1-9]|1[0-9]|20)/b', 'a/([1-5])/b' ]
Expandido
Ative a expansão de chaves definindo a opção expand como true, ou usando braces.expand() (retorna um array semelhante ao que você esperaria do Bash, ou echo {1..5}, ou minimatch):
console.log(braces('a/{x,y,z}/b', { expand: true }));
//=> ['a/x/b', 'a/y/b', 'a/z/b']
console.log(braces.expand('{01..10}'));
//=> ['01','02','03','04','05','06','07','08','09','10']
Expanda listas (como "sets" do Bash):
console.log(braces('a/{foo,bar,baz}/*.js'));
//=> ['a/(foo|bar|baz)/*.js']
console.log(braces.expand('a/{foo,bar,baz}/*.js'));
//=> ['a/foo/*.js', 'a/bar/*.js', 'a/baz/*.js']
Expanda intervalos de caracteres (como "sequências" do Bash):
console.log(braces.expand('{1..3}')); // ['1', '2', '3']
console.log(braces.expand('a/{1..3}/b')); // ['a/1/b', 'a/2/b', 'a/3/b']
console.log(braces('{a..c}', { expand: true })); // ['a', 'b', 'c']
console.log(braces('foo/{a..c}', { expand: true })); // ['foo/a', 'foo/b', 'foo/c']
// supports zero-padded ranges
console.log(braces('a/{01..03}/b')); //=> ['a/(0[1-3])/b']
console.log(braces('a/{001..300}/b')); //=> ['a/(0{2}[1-9]|0[1-9][0-9]|[12][0-9]{2}|300)/b']
Consulte fill-range para todas as opções disponíveis de expansão de intervalos.
Passos, ou incrementos, podem ser usados com intervalos:
console.log(braces.expand('{2..10..2}'));
//=> ['2', '4', '6', '8', '10']
console.log(braces('{2..10..2}'));
//=> ['(2|4|6|8|10)']
Quando o método .optimize é usado, ou options.optimize é definido como true, as sequências são passadas para to-regex-range para expansão.
Os padrões de chaves podem ser aninhados. Os resultados de cada string expandida não são ordenados, e a ordem da esquerda para a direita é preservada.
Chaves "expandidas"
console.log(braces.expand('a{b,c,/{x,y}}/e'));
//=> ['ab/e', 'ac/e', 'a/x/e', 'a/y/e']
console.log(braces.expand('a/{x,{1..5},y}/c'));
//=> ['a/x/c', 'a/1/c', 'a/2/c', 'a/3/c', 'a/4/c', 'a/5/c', 'a/y/c']
Chaves "otimizadas"
console.log(braces('a{b,c,/{x,y}}/e'));
//=> ['a(b|c|/(x|y))/e']
console.log(braces('a/{x,{1..5},y}/c'));
//=> ['a/(x|([1-5])|y)/c']
Escapando chaves
Um padrão de chaves não será expandido nem avaliado se a chave de abertura ou a de fechamento estiver escapada:
console.log(braces.expand('a\\{d,c,b}e'));
//=> ['a{d,c,b}e']
console.log(braces.expand('a{d,c,b\\}e'));
//=> ['a{d,c,b}e']
Escapando vírgulas
Vírgulas dentro de chaves também podem ser escapadas:
console.log(braces.expand('a{b\\,c}d'));
//=> ['a{b,c}d']
console.log(braces.expand('a{d\\,c,b}e'));
//=> ['ad,ce', 'abe']
Itens únicos
Seguindo as convenções do bash, um padrão de chaves também não é expandido quando contém um único caractere:
console.log(braces.expand('a{b}c'));
//=> ['a{b}c']
Tipo: Number
Padrão: 10,000
Descrição: Limita o comprimento da string de entrada. Útil quando a string de entrada é gerada ou quando sua aplicação permite que usuários passem uma string, entre outros casos.
console.log(braces('a/{b,c}/d', { maxLength: 3 })); //=> throws an error
Tipo: Boolean
Padrão: undefined
Descrição: Gera um padrão de chaves "expandido" (alternativamente, você pode usar o método braces.expand(), que faz a mesma coisa).
console.log(braces('a/{b,c}/d', { expand: true }));
//=> [ 'a/b/d', 'a/c/d' ]
Tipo: Boolean
Padrão: undefined
Descrição: Remove duplicatas do array retornado.
Tipo: Number
Padrão: 1000
Descrição: Para evitar que padrões maliciosos sejam passados por usuários, um erro é lançado quando braces.expand() é usado ou quando options.expand é true e o intervalo gerado exceder o rangeLimit.
Você pode personalizar options.rangeLimit ou defini-lo como Inifinity para desativar isso completamente.
Exemplos