मैं एकाधिक फ़ाइल प्रकारों को नियंत्रित करने के लिए निम्न रेगेक्स का उपयोग कर रहा हूं:

*\.(?:css|js|map|eot|ttf|woff|woff2)$

लेकिन मैं इस रेगेक्स से एक विशेष config.js फ़ाइल को बाहर करना चाहता हूं। मैं इसे कैसे हासिल कर सकता हूं?

1
user1107888 12 पद 2019, 20:42
आपका रेगेक्स प्लेटफॉर्म क्या है? यदि लुकबेइंड समर्थित है तो उपयोग करें: \.(?:css|js|map|eot|ttf|woff|woff2)(?<!config\.js)$। बीटीडब्ल्यू आपके रेगेक्स की शुरुआत में एक अनावश्यक * है
 – 
anubhava
12 पद 2019, 20:45
*शुरुआत में बेमानी क्यों है? * यह इंगित करने के लिए है कि रेगेक्स और डॉट कैरेक्टर की शुरुआत के बीच कितने भी वर्ण हो सकते हैं।
 – 
user1107888
12 पद 2019, 21:10
रेगेक्स में जो .* * नहीं है
 – 
anubhava
12 पद 2019, 21:13
आप विशिष्ट फ़ाइलों को उनके नाम के आधार पर बाहर करने का प्रयास कर रहे हैं, क्या यह सही है?
 – 
ctwheels
12 पद 2019, 21:15
1
@अनुभव, कृपया उत्तर के रूप में सुझाए गए रेगेक्स को जोड़ें ताकि मैं इसे स्वीकृत के रूप में चिह्नित कर सकूं
 – 
user1107888
12 पद 2019, 21:27

2 जवाब

सबसे बढ़िया उत्तर

आप वास्तव में एक नकारात्मक लुकहेड का उपयोग कर सकते हैं (लुकबीइंड्स के बजाय लुकहाइंड आमतौर पर कम समर्थित होते हैं (जैसे जावास्क्रिप्ट लुकहेड का समर्थन करता है लेकिन जब तक आप एक्मा स्क्रिप्ट 2018 या उच्चतर का उपयोग नहीं कर रहे हैं) तब तक पीछे की ओर देखने का समर्थन नहीं करता है) यदि आप असाधारण रूप से केवल अस्वीकृत करना चाहते हैं config.js नाम और इसलिए निम्नलिखित रेगेक्स का उपयोग करते हुए,

^(?!config\.js$).*\.(?:css|js|map|eot|ttf|woff2?)$

डेमो

यहां ^(?!config\.js$) भाग मैच को अस्वीकार कर देगा यदि इनपुट केवल और केवल ठीक config.js है, जहां यह उदाहरण के लिए अनुमति देगा। myconfig.js जो मुझे लगता है कि आप अनुमति देना चाहेंगे।

मैंने आपके woff|woff2 को woff2? तक छोटा कर दिया है क्योंकि दोनों का मतलब समान है और आपके रेगेक्स को थोड़ा और कॉम्पैक्ट बनाता है।

संपादित करें:

जैसा कि अनुभव ने बताया, config.js फ़ाइल नाम एक निर्देशिका नाम से पहले हो सकता है और उस स्थिति में कोई निम्नलिखित रेगेक्स का उपयोग कर सकता है,

^(?!(.*[\\\/])?config\.js$).*\.(?:css|js|map|eot|ttf|woff2?)$

Demo2

1
Silvanas 13 पद 2019, 20:48
यह केवल config.js को छोड़ देगा यदि यह प्रारंभ में पाया जाता है। उदाहरण के लिए यह /file/config.js को नहीं छोड़ेगा।
 – 
anubhava
12 पद 2019, 22:27
@अनुभव: अरे दोस्त, हालांकि ओपी ने फ़ाइल नाम से पहले निर्देशिका नामों के बारे में उल्लेख नहीं किया है, लेकिन वैकल्पिक रूप से निर्देशिका विभाजक चरित्र होने से इसे आसानी से ख्याल रखा जा सकता है। मेरा जवाब अपडेट किया।
 – 
Silvanas
13 पद 2019, 20:46

चूंकि लुकबीइंड nginx.conf में समर्थित है, इसलिए आप अपने रेगेक्स में इस लुकबेंड अभिकथन का उपयोग कर सकते हैं:

.*\.(?:css|js|map|eot|ttf|woff|woff2)(?<!\bconfig\.js)$

रेगेक्स डेमो

(?<!\bconfig\.js) अन्य *.js, *.css आदि फाइलों का मिलान करते समय मिलान config.js को छोड़ने के लिए नकारात्मक दिखने वाला दावा है। \b शब्द सीमा के लिए है।

2
anubhava 12 पद 2019, 22:25
1
अरे अनुभव, बढ़िया जवाब लेकिन आपका रेगेक्स केवल config.js के अलावा myconfig.js जैसे कुछ भी अवरुद्ध कर सकता है जिसे ओपी अनुमति देना चाहता है।
 – 
Silvanas
12 पद 2019, 22:21
1
धन्यवाद, इसे पीछे देखने में \b जोड़कर आसानी से ठीक किया जा सकता है। अद्यतन उत्तर देखें।
 – 
anubhava
12 पद 2019, 22:25
हमम... \b अभी भी my-config.js जैसे नामों और config.js फ़ाइल नाम से पहले गैर-शब्द वर्ण मौजूद होने पर किसी भी नाम को ब्लॉक कर देगा। मेरा अपडेट किया गया answer देखें जो केवल config.js फ़ाइल नाम या config.js से पहले निर्देशिका नाम वाला पथ संभालता है।
 – 
Silvanas
13 पद 2019, 20:51