रेगुलर एक्सप्रेशंस- मैच कुछ भी


278

मैं पूरी तरह से कुछ भी (व्हाट्सएप सहित) मैच करने के लिए एक अभिव्यक्ति कैसे कर सकता हूं?
उदाहरण:

रेगेक्स: मैंने _____ भेड़ें खरीदीं।

माचिस: मैंने भेड़ें खरीदीं। मैंने एक भेड़ खरीदी। मैंने पाँच भेड़ें खरीदीं।

मैंने प्रयोग करने की कोशिश की (.*), लेकिन वह काम नहीं करता है।

अद्यतन: मुझे यह काम करने के लिए मिला, जाहिरा तौर पर समस्या नियमित अभिव्यक्तियों के साथ नहीं थी, यह सिर्फ इतना है कि (।) वर्ण बच रहे थे।


27
.*कार्य करना चाहिए। क्या आप अपना वास्तविक कोड पेस्ट कर सकते हैं?
जैकब एगर जूल

2
आप किस भाषा में कोडिंग कर रहे हैं?
जिगी

जवाबों:


293

आम तौर पर डॉट नईलाइन्स को छोड़कर किसी भी चरित्र से मेल खाता है

तो अगर .*काम नहीं कर रहा है, तो "डॉट मेल नईलाइन्स, भी" विकल्प (या उपयोग (?s).*) सेट करें।

यदि आप जावास्क्रिप्ट का उपयोग कर रहे हैं, जिसमें "डॉटॉल" विकल्प नहीं है, तो प्रयास करें [\s\S]*। इसका अर्थ है "किसी भी संख्या में ऐसे वर्णों का मिलान करना जो या तो व्हाट्सएप या गैर-व्हाट्सएप" हों - प्रभावी रूप से "किसी भी स्ट्रिंग से मेल खाते हैं"।

एक अन्य विकल्प जो केवल जावास्क्रिप्ट के लिए काम करता है (और किसी अन्य रेगेक्स स्वाद द्वारा मान्यता प्राप्त नहीं है) [^]*जो किसी भी स्ट्रिंग से मेल खाता है। लेकिन [\s\S]*यह अधिक व्यापक रूप से उपयोग किया जाता है, शायद इसलिए कि यह अधिक पोर्टेबल है।


7
.*मेल नहीं खाता, \nलेकिन इसमें एक स्ट्रिंग होती है जिसमें केवल \nइसलिए होता है क्योंकि यह 0 वर्ण से मेल खाती है।
टोटो

1
यदि जावास्क्रिप्ट का उपयोग करते हुए इस पैटर्न के लिए एक चर सेट करते समय स्लैश को नष्ट करने के लिए मत भूलना जैसे: var pattern = "[[\\ s \\ S] *";
एस्ट्रा बेयर

(?s).*मेरे लिए काम करता है नई लाइन सहित सब कुछ मिलान किया
गुजरात सैन्टाना

1
उपयोग करने के साथ एक PROBLEM है / [\ _ s \ S] * /। यदि आप इसे अपने कोड में उपयोग करते हैं और फिर ऐसे कोड पर टिप्पणी करते हैं जो एक वाक्यविन्यास त्रुटि का कारण बनता है क्योंकि पैटर्न का अंत टिप्पणी के अंत का अर्थ लिया जाता है। फिर आपको इसे काम करने के लिए उस पैटर्न को कमेंट-आउट कोड से निकालना होगा। लेकिन तब यदि आप इसे कभी भी अन-कमेंट करते हैं तो यह फिर से काम नहीं करेगा, या जैसा काम करना चाहिए, वैसा नहीं करना चाहिए।
पानू तर्क

यह किसी भी regex के साथ तारांकन में समाप्त होने के मामले में होगा। बेशक *( बाद में /.*(?:)/) या रेगेक्स कंस्ट्रक्टर ( var foo = new RegExp(".*")) का उपयोग करके कुछ को जोड़ना आसान है ।
टिम पीटरसन

177

(.*?) कुछ भी मेल खाता है - मैं इसे सालों से इस्तेमाल कर रहा हूं।


61
लेकिन क्या यह एक नई रेखा से मेल खाता है?
ineedahero

मैंने इसे Sublime Text पर इस्तेमाल किया और इसने पूरी तरह से काम किया। धन्यवाद! ("title":".*?")
स्कैब्रालो

8
जावास्क्रिप्ट में, का उपयोग करें [\s\S]*या [^]*
जेफ हुआजसमेन

मुझे नहीं पता लेकिन हर बार जब मैं इस अभिव्यक्ति का उपयोग करता हूं, तो मैं अपने उपयोग के मामले के लिए विशिष्ट अभिव्यक्ति नहीं करने के लिए दोषी महसूस करता हूं। अगर कहते हैं, w+पर्याप्त नहीं है, तो मैं उपयोग कर रहा हूं .+। सौभाग्य से मुझे अभी तक काटने के लिए वापस नहीं आया है।
तुषार

मेरे लिए काम करता है अजगर का उपयोग कर
सुफा

89

निम्न में से 1 चुनें और याद रखें !!! :)

[\s\S]*
[\w\W]*
[\d\D]*

स्पष्टीकरण:

\s: व्हाट्सएप: व्हाट्सएप \Sनहीं

\w: शब्द: शब्द \Wनहीं

\d: अंक: अंक \Dनहीं

( यदि आप 1 या अधिक वर्ण [0 या अधिक के बजाय] चाहते हैं तो आप इसके *लिए विनिमय कर सकते हैं +)।




बोनस संस्करण:

यदि आप एक लाइन में सब कुछ मैच करना चाहते हैं, तो आप इसका उपयोग कर सकते हैं:

[^\n]+

स्पष्टीकरण:

^: नहीं

\n: रेखा अवरोध

+: 1 वर्ण या उससे अधिक के लिए



6

उपयोग करें .*, और सुनिश्चित करें कि आप अपने कार्यान्वयन के सिंगल-लाइन के समकक्ष का उपयोग कर रहे हैं ताकि आप लाइन के अंत पर मेल खाएंगे ।

यहाँ एक महान व्याख्या है -> http : //www . अनियमित- expressions.info/dot.html


4

क्योंकि .न्यूलाइन या लाइन टर्मिनेटर को छोड़कर कोई एकल वर्ण ढूंढें।

तो, कुछ भी मिलान करने के लिए, आप इस तरह का उपयोग कर सकते हैं: (.|\n)*?

आशा करता हूँ की ये काम करेगा!


2

(.*?)मेरे लिए काम नहीं करता है। मैं उन टिप्पणियों से मेल खाने की कोशिश कर रहा हूं /* */, जिनमें कई लाइनें हो सकती हैं।

इसे इस्तेमाल करे:

([a]|[^a])

यह रेगेक्स मेल खाता है aया anything else expect a। बिल्कुल, इसका मतलब है कि सब कुछ मेल खाता है।

BTW, मेरी स्थिति में, /\*([a]|[^a])*/C शैली टिप्पणियों से मेल खाता है।

@ एक और अधिक संक्षिप्त तरीके के लिए धन्यवाद।

[\s\S]

1
जेएस में ऐसा करने का सबसे आम तरीका है [\s\S]- यानी मैच स्पेस और नॉन-स्पेस।
मप्र

2

जावास्क्रिप्ट के लिए सबसे अच्छा और सरल उत्तर /.* / प्रतीत होगा।

जैसा कि दूसरों द्वारा सुझाया गया है /(.*?)/ उतना ही कारगर होगा लेकिन /.*/ सरल है। पैटर्न के अंदर () की जरूरत नहीं है, जहां तक ​​मैं देख सकता हूं और न ही अंत? बिल्कुल कुछ भी मिलान करने के लिए (खाली तारों सहित)

गैर-समाधान:

/ [\ s \ S] / खाली तारों से मेल नहीं खाता है इसलिए यह समाधान नहीं है।

/ [\ s \ S] * / DOES मिलान भी खाली स्ट्रिंग है। लेकिन इसमें एक समस्या है: यदि आप इसे अपने कोड में उपयोग करते हैं तो आप ऐसे कोड पर टिप्पणी नहीं कर सकते क्योंकि '* /' की व्याख्या एंड-ऑफ-कमेंट के रूप में की जाती है।

/ ([\ _ s \ _] *) / काम करता है और टिप्पणी-समस्या नहीं है। लेकिन यह समझने में अधिक लंबा और जटिल है।


Btw। ऐसा लगता है कि ऊपर दिए गए कोड-अंश स्टैक ओवरफ्लो को इटैलिक में मेरे उत्तर के कुछ हिस्सों को प्रस्तुत करते हैं, यह मेरा उद्देश्य नहीं था।
पानू तर्क

1

यदि आप जावास्क्रिप्ट का उपयोग कर रहे हैं, तो ES2018 ने s (dotAll) ध्वज को जोड़ा। sध्वज के साथ , डॉट .किसी भी वर्ण से मेल खाएगा जिसमें नई सूचियाँ शामिल हैं।

console.log("line_1\nline_2".match(/.+/s))

नोट : यह अभी तक कुछ ब्राउज़रों में समर्थित नहीं है।


1

2018 विनिर्देश एस ध्वज (उपनाम: dotAll) प्रदान करता है , ताकि लाइनब्रीक .सहित किसी भी चरित्र से मेल खाए:

const regExAll = /.*/s; //notice the 's'

let str = `
Everything
	in 	this
			string
					will
						be
	matched. Including whitespace (even Linebreaks).
`;

console.log(`Match:`, regExAll.test(str)); //true
console.log(`Index Location:`, str.search(regExAll));

let newStr = str.replace(regExAll,"🐔");
console.log(`Replaced with:`,newStr); //Index: 0

ऊपर दिया गया कोड क्रोम में काम करता है, लेकिन sफ्लैगशिप को अभी तक फ़ायरफ़ॉक्स में लागू नहीं किया गया है, लेकिन यह जल्द ही होगा ।



0

मैं उपयोग की सलाह देता हूं /(?=.*...)/g

उदाहरण

const text1 = 'I am using regex';
/(?=.*regex)/g.test(text1) // true

const text2 = 'regex is awesome';
/(?=.*regex)/g.test(text2) // true

const text3 = 'regex is util';
/(?=.*util)(?=.*regex)/g.test(text3) // true

const text4 = 'util is necessary';
/(?=.*util)(?=.*regex)/g.test(text4) // false because need regex in text

परीक्षण करने के लिए regex101 का उपयोग करें


0

जवाबों का एक बहुत पुराना है, इसलिए मैंने पाया है कि अगर आप सिर्फ "/.*/i" के साथ चरित्र सामग्री की परवाह किए बिना किसी भी स्ट्रिंग का परीक्षण करेंगे, तो पर्याप्त रूप से हर किसी को मिल जाएगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.