2012-01-13 11 views
8

ठीक है, मैं अभी बहुत मोटा महसूस कर रहा हूं। असल में, मैं एक जावास्क्रिप्ट नियमित अभिव्यक्ति को परिभाषित करना चाहता हूं जो से मेल खाएगा को ठीक से एक विशेष स्ट्रिंग को छोड़कर। तो कहते हैं कि मैं स्ट्रिंगएक जावास्क्रिप्ट नियमित अभिव्यक्ति को परिभाषित करना जो किसी विशेष स्ट्रिंग को छोड़कर किसी भी चीज़ से मेल खाता है

"dog" 

या

"cat" 

मैं एक ही स्टैंडअलोन नियमित अभिव्यक्ति ऐसी है कि वह स्ट्रिंग

"dogsled" 

या स्ट्रिंग से मेल खाएगी चाहते हैं

"cattle" 

बस "कुत्ते" या "बिल्ली" पर नहीं स्वयं का मैं इस की कोशिश की है, जो मूल रूप से कहते हैं, "बिल्ली" या "कुत्ता" है, जो वास्तव में मैं क्या जरूरत नहीं है के साथ शुरुआत कुछ भी उपेक्षा ...

var pattern= /^(?!dog|cat).+/ 

pattern.test("cat") // false, as expected 
pattern.test("dog") // false, as expected 
pattern.test("bananananana") // true 
pattern.test("dogsled") // false, but the regexp I want would return true 

यह सरल होने के लिए .... धन्यवाद है!

संपादित बस स्पष्ट करने के लिए, मैं परिणाम मैं want- रेगुलर एक्सप्रेशन "dogsled" या के लिए झूठे के लिए "कुत्ता" के लिए झूठे और सच लौटने "चाहिए पाने के लिए वापसी से कोई भी मान निषेध करने के लिए नहीं करना चाहते हैं बिल्ली "और के लिए सच" मवेशी "

+2

+1। इतने सारे [टैग: रेगेक्स] प्रश्न सिर्फ "मेरे पास कोड हो सकता है" शैली है। – Matt

+4

क्यों न सिर्फ अस्वीकार करें? '! string.match (/^कुत्ता | बिल्ली $ /)' –

+0

@LinusKleen ha ha ha regex प्रश्न के लिए महान उपयोगकर्ता नाम :-) – Pointy

उत्तर

6

मैं के रूप में Linus Kleen's answer में बताया गया है बस एक मैच को नकारने के लिए चुनते हैं। हालांकि, अगर आप पूरी तरह से यह सब regex में करना चाहिए (या शिक्षण अनुभव या कुछ और के लिए) तो मुझे लगता है कि निम्नलिखित काम करना चाहिए:

^((dog|cat(?!$)).+|(?!dog|cat).+)$ 

यह एक प्रत्यावर्तन में दो नकारात्मक lookaheads उपयोग करता है। पहला कहता है "मैच cat या dog यदि स्ट्रिंग वर्ण ($) के अंत तक इसका पालन नहीं किया जाता है, तो इसके बाद कुछ और भी"। यह dogsled और cats और उस प्रकृति की चीजें से मेल खाता है।

प्रत्यावर्तन की दूसरी छमाही "यकीन है कि स्ट्रिंग (^) की शुरुआत dog या cat (इसलिए यह उन लोगों में से किसी के साथ शुरू नहीं करता है), तो कुछ भी मेल खाते हैं, जिसके बाद नहीं हुआ है" कहते हैं। यह आपको कोई भी शब्द देता है जो cat या dog (banana) से शुरू नहीं होता है।

Here's an example on regexpal। वास्तव में रेगेक्स को जाने के लिए

+0

उत्कृष्ट विश्लेषण के अच्छे विश्लेषण के लिए –

+0

@ eldarerathis- केवल रेगेक्स के लिए आवश्यकता केवल एकीकरण बाधाओं के लिए है, और यह अच्छी तरह से फिट बैठता है! सरल अस्वीकृति भी मेरी वरीयता होगी, लेकिन यह काम करता है। धन्यवाद! – VLostBoy

0

मुझे लगता है कि इस चाल करना चाहिए:

/^(dog|cat)?.+/ 
+0

से ऊपर के मामले में सच या गलत वापस आ जाएगा। यह 'कुत्ते' दोनों से मेल खाता है और 'बिल्ली'। – eldarerathis

+0

लगभग- यह उलटा मामला संतुष्ट करता है ... – VLostBoy

4

मैं नकारात्मक लुक-आगे दावे ((?! ...)) पूरी तरह से सभी JavaScript दुभाषियों में उपलब्ध न करने के लिए याद करने के लिए लग रहे हैं। रेगेक्स के परिणाम पर एक साधारण अस्वीकृति भी पर्याप्त होनी चाहिए, नहीं?

var pattern = /^cat|dog$/; 

!pattern.test("cat");   // => false 
!pattern.test("dog");   // => false 
!pattern.test("bananananana"); // => true 
!pattern.test("dogsled");  // => true 
+0

वास्तव में? मुझे पता है कि जावास्क्रिप्ट दिखने का समर्थन नहीं करता है, लेकिन मुझे लुकहेड (या तो सकारात्मक या नकारात्मक) के साथ किसी भी समस्या से अवगत नहीं था। वास्तविक समस्या – Wiseguy

+0

प्लस वन। प्लस दो (अगर मैं कर सकता था)। – davogotland

संबंधित मुद्दे

 संबंधित मुद्दे