
ترخيص MIT لـ braces 3.0.3 مع backport للعمق CVE-2026-93687 تمت مراجعته؛ استهلاك مثبّت فقط
توسيع الأقواس على غرار Bash، مُنفَّذ بلغة JavaScript. أكثر أمانًا من مكتبات توسيع الأقواس الأخرى، مع دعم كامل لمواصفات أقواس Bash 4.3، دون التضحية بالسرعة.
يُرجى التفكير في متابعة مؤلف هذا المشروع، Jon Schlinkert، والتفكير في منح المشروع نجمة لإظهار ❤️ والدعم.
ثبّت باستخدام npm:
$ npm install --save braces
راجع سجل التغييرات للاطلاع على التفاصيل.
تجعل أنماط brace أنماط glob أكثر قوة من خلال إضافة القدرة على مطابقة نطاقات وتسلسلات محددة من الأحرف.
a/{b,c}/d => ['a/b/d', 'a/c/d']{01..03} => ['01', '02', '03']{2..10..2} => ['2', '4', '6', '8', '10']التصدير الرئيسي هو دالة تأخذ نمط brace واحدًا أو أكثر patterns و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']
بشكل افتراضي، تُترجم أنماط الأقواس إلى سلاسل نصية مُحسَّنة لإنشاء التعبيرات النمطية ومطابقتها.
مُترجَم
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' ]
موسّع
فعّل توسيع الأقواس بتعيين الخيار expand إلى true، أو باستخدام braces.expand() (يُعيد مصفوفة مشابهة لما تتوقعه من Bash، أو echo {1..5}، أو 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']
توسيع القوائم (مثل "المجموعات" في 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']
توسيع نطاقات الأحرف (مثل "التسلسلات" في 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']
راجع fill-range للاطلاع على جميع خيارات توسيع النطاقات المتاحة.
يمكن استخدام الخطوات، أو الزيادات، مع النطاقات:
console.log(braces.expand('{2..10..2}'));
//=> ['2', '4', '6', '8', '10']
console.log(braces('{2..10..2}'));
//=> ['(2|4|6|8|10)']
عند استخدام طريقة .optimize، أو عند تعيين options.optimize على true، يتم تمرير التسلسلات إلى to-regex-range للتوسيع.
قد تكون أنماط الأقواس متداخلة. لا يتم فرز نتائج كل سلسلة موسّعة، ويتم الحفاظ على الترتيب من اليسار إلى اليمين.
الأقواس "الموسّعة"
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']
أقواس "محسّنة"
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']
الهروب من الأقواس
لن يتم توسيع نمط الأقواس أو تقييمه إذا تم الهروب من القوس الافتتاحي أو الإغلاقي:
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']
تهريب الفواصل
يمكن أيضًا تهريب الفواصل داخل الأقواس المعقوفة:
console.log(braces.expand('a{b\\,c}d'));
//=> ['a{b,c}d']
console.log(braces.expand('a{d\\,c,b}e'));
//=> ['ad,ce', 'abe']
باتباع اصطلاحات bash، لا يتم أيضًا توسيع نمط الأقواس عندما يحتوي على حرف واحد:
console.log(braces.expand('a{b}c'));
//=> ['a{b}c']
النوع: Number
الافتراضي: 10,000
الوصف: يحدّ من طول سلسلة الإدخال. مفيد عندما تكون سلسلة الإدخال مُولّدة أو عندما يسمح تطبيقك للمستخدمين بتمرير سلسلة، وما إلى ذلك.
console.log(braces('a/{b,c}/d', { maxLength: 3 })); //=> throws an error
النوع: Boolean
القيمة الافتراضية: undefined
الوصف: إنشاء نمط أقواس "موسّع" (بدلاً من ذلك يمكنك استخدام الدالة braces.expand()، التي تفعل الشيء نفسه).
console.log(braces('a/{b,c}/d', { expand: true }));
//=> [ 'a/b/d', 'a/c/d' ]
النوع: Boolean
القيمة الافتراضية: undefined
الوصف: إزالة التكرارات من المصفوفة المُرجعة.
النوع: Number
القيمة الافتراضية: 1000
الوصف: لمنع تمرير أنماط خبيثة من قِبل المستخدمين، يتم طرح خطأ عند استخدام braces.expand() أو عندما تكون options.expand صحيحة وسيتجاوز النطاق المُولَّد قيمة rangeLimit.
يمكنك تخصيص options.rangeLimit أو تعيينه إلى Inifinity لتعطيل هذا كليًا.
أمثلة
// pattern exceeds the "rangeLimit", so it's optimized automatically
console.log(braces.expand('{1..1000}'));
//=> ['([1-9]|[1-9][0-9]{1,2}|1000)']