
MIT-लाइसेंस प्राप्त braces 3.0.3, समीक्षित CVE-2026-93687 गहराई बैकपोर्ट के साथ; केवल पिन किए गए उपभोग हेतु
JavaScript में कार्यान्वित, Bash-जैसा ब्रेस विस्तार। अन्य ब्रेस विस्तार लाइब्रेरीज़ की तुलना में अधिक सुरक्षित, Bash 4.3 ब्रेस विनिर्देश के पूर्ण समर्थन के साथ, गति से समझौता किए बिना।
कृपया इस परियोजना के लेखक, Jon Schlinkert को फ़ॉलो करने पर विचार करें, और अपना ❤️ दिखाने और समर्थन देने के लिए परियोजना को स्टार करने पर विचार करें।
npm के साथ इंस्टॉल करें:
$ npm install --save braces
विवरण के लिए changelog देखें।
Brace पैटर्न विशिष्ट श्रेणियों और वर्णों के अनुक्रमों को मिलाने की क्षमता जोड़कर globs को अधिक शक्तिशाली बनाते हैं।
a/{b,c}/d => ['a/b/d', 'a/c/d']{01..03} => ['01', '02', '03']{2..10..2} => ['2', '4', '6', '8', '10']मुख्य export एक फ़ंक्शन है जो एक या अधिक 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 "sets" की तरह):
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']
See fill-range for all available range-expansion options.
Steps, or increments, may be used with ranges:
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
विवरण: लौटाए गए array से डुप्लिकेट हटाएँ।
प्रकार: Number
डिफ़ॉल्ट: 1000
विवरण: उपयोगकर्ताओं द्वारा दुर्भावनापूर्ण पैटर्न पास किए जाने से रोकने के लिए, जब braces.expand() का उपयोग किया जाता है या options.expand true हो और उत्पन्न रेंज 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)']