2011-12-06 17 views
9

मैं यह पता लगाने के लिए एक नियमित अभिव्यक्ति (जावास्क्रिप्ट में प्रयुक्त) रचना करने के लिए कैसे नहीं कर पा रहे है जो निम्न है:नियमित अभिव्यक्ति नकारात्मक मिलान

मैच सभी स्ट्रिंग्स जहां 4 चरित्र के बाद वर्ण "जीपी शामिल नहीं है "।

कुछ उदाहरण तार:

  • EDAR - मेल खाते हैं!
  • EDARGP - कोई मुकाबला नहीं
  • EDARDTGPRI - कोई मुकाबला नहीं
  • ECMRNL - मैच

मैं प्यार यहाँ कुछ मदद चाहते ...

+0

मैं पहले चार वर्णों का उपभोग करता हूं और फिर जीपी की तलाश करता हूं। क्या यहां एक रेगेक्स भी जरूरी है? क्यों नहीं "EDARGP" .slice (4) .indexOf ('GP') == -1'? – JesseBuesking

+0

यह काम कर सकता है, सिवाय इसके कि मैं "कोड" नहीं बदल सकता, मैं केवल रेगेक्स स्ट्रिंग को बदल सकता हूं, क्योंकि कोड को कई प्रकार के इनपुट मानों के साथ काम करने की आवश्यकता है –

उत्तर

11

उपयोग शून्य चौड़ाई दावे:

if (subject.match(/^.{4}(?!.*GP)/)) { 
    // Successful match 
} 

स्पष्टीकरण:

var str = "EDARDTGPRI"; 
var test = !(/GP/.test(str.substr(4))); 

टेस्ट मैचों के लिए सच और के लिए अवास्तविक लौटाते हैं:

" 
^  # Assert position at the beginning of the string 
.  # Match any single character that is not a line break character 
    {4} # Exactly 4 times 
(?!  # Assert that it is impossible to match the regex below starting at this position (negative lookahead) 
    .  # Match any single character that is not a line break character 
     * # Between zero and unlimited times, as many times as possible, giving back as needed (greedy) 
    GP # Match the characters “GP” literally 
) 
" 
+1

आपको यह स्पष्टीकरण कैसे मिला? यह स्वतः उत्पन्न होता है, इस मामले में मुझे यह जानना अच्छा लगेगा कि आप किस उपकरण का उपयोग कर रहे हैं। – Bart

+1

@ बार्ट रेगेक्सबड्डी :) – FailedDev

+0

धन्यवाद @ फ़ेलडेव! – Bart

7

आप उपयोग कर सकते हैं क्या एक नकारात्मक अग्रदर्शी कहा जाता है यहां दावा यह स्थान से पहले स्ट्रिंग में दिखता है और केवल तभी मेल खाता है जब पैटर्न शामिल/नहीं/पाया जाता है।

/^.{4}(?!.*GP)/ 

यह मैच केवल तभी, पहले चार वर्णों के बाद, स्ट्रिंग GP नहीं मिला है: यहाँ एक उदाहरण नियमित अभिव्यक्ति है।

+2

आपने दौड़ जीती है। :) +1 – FailedDev

+0

धन्यवाद, यह काम करता है। बस यकीन नहीं है कि "?!" भाग करता है ... –

2

कुछ इस तरह कर सकता है गैर।

+0

अच्छा विकल्प। +1। – FailedDev

+1

@FailedDev धन्यवाद लेकिन निश्चित रूप से आप और दान के पास सही जवाब है: पी अच्छी तरह से किया गया। –

+0

क्या हम? आपका समाधान संभवतः तेज़ उल्लेख नहीं करना तेज़ है :) – FailedDev

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