2013-06-22 7 views
36

आप जावास्क्रिप्ट में कैसे जांचते हैं, यदि कोई स्ट्रिंग उचित नियमित अभिव्यक्ति है जो संकलित करेगी?कैसे जांचें कि इनपुट स्ट्रिंग एक वैध नियमित अभिव्यक्ति है या नहीं?

उदाहरण के लिए, जब आप निम्न जावास्क्रिप्ट निष्पादित करते हैं, तो यह एक त्रुटि उत्पन्न करता है।

var regex = new RegExp('abc ([a-z]+) ([a-z]+))'); 
// produces: 
// Uncaught SyntaxError: Invalid regular expression: /abc ([a-z]+) ([a-z]+))/: Unmatched ')' 

कोई निर्धारित करता है कि कोई स्ट्रिंग वैध रेगेक्स होगा या नहीं?

+6

आपको रेगेक्स का परीक्षण करने के लिए रेगेक्स की आवश्यकता है? lol –

+0

मुफ्त कोड की मांग नहीं है कि Stackoverflow कैसे काम करता है – Bojangles

+0

कृपया अपना कोड स्पष्ट रूप से निर्दिष्ट करें हम आपकी मदद करेंगे –

उत्तर

49

आप try/catch और RegExp निर्माता का उपयोग कर सकते हैं:

var isValid = true; 
try { 
    new RegExp("the_regex_to_test_goes_here"); 
} catch(e) { 
    isValid = false; 
} 

if(!isValid) alert("Invalid regular expression"); 
+0

मैं इसका परीक्षण करता हूं, लेकिन सही तरीके से काम नहीं करता :( –

+1

@ जाक: यदि आप "काम नहीं करते" के बारे में अधिक जानकारी प्रदान करते हैं तो हम आपकी मदद कर सकते हैं। लेकिन केवल यह कहकर "यह काम नहीं करता है" हमें बताता है कुछ भी नहीं। आप किस इनपुट का प्रयास करते हैं? आपको क्या आउटपुट मिलता है? क्या आपको एक अलग त्रुटि मिल रही है? –

+0

मैं_regex_to_test_goes_here के बजाय अपने टेक्स्ट बॉक्स मान को प्रतिस्थापित करता हूं लेकिन यह निर्धारित नहीं करता है कि टेक्स्ट बॉक्स मान वैध है या नहीं। क्या अब मेरे प्रश्न की जानकारी पर्याप्त है? –

5

यहाँ एक छोटे से समारोह है कि regexes, स्ट्रिंग या प्रतिमानों के दोनों प्रकार की वैधता की जांच करता है:

function validateRegex(pattern) { 
    var parts = pattern.split('/'), 
     regex = pattern, 
     options = ""; 
    if (parts.length > 1) { 
     regex = parts[1]; 
     options = parts[2]; 
    } 
    try { 
     new RegExp(regex, options); 
     return true; 
    } 
    catch(e) { 
     return false; 
    } 
} 

उपयोगकर्ता हो जाएगा उदाहरण के लिए test और /test/g दोनों का परीक्षण करने में सक्षम। Here एक कामकाजी पहेली है।

+0

@JakSamun क्या आपने कोशिश की? –

+0

यह फ़ंक्शंस किसी भी मनमाने ढंग से तारों की अनुमति देता है, इसलिए मुझे यकीन नहीं है कि यह कौन सा ओप –

+0

(क्या आपने डाउनोट किया था? Lol) मेरा उत्तर और दूसरा उत्तर मूल रूप से सटीक वही काम करता है, अपवाद के साथ कि मैं भी संभावित विकल्पों को ध्यान में रखता हूं पैटर्न के अंदर। और, ईमानदार होने के लिए, ओपी क्या चाहता था सिर्फ "जांच करना कि इनपुट स्ट्रिंग वैध रेगेक्स है या नहीं"; इनपुट लंबाई पर विशेष रूप से कोई बाधा नहीं थी, इसलिए किसी भी स्ट्रिंग को इनपुट के रूप में पारित किया जा सकता था। इसके अलावा, मैं वही कर रहा हूं जो उसने पूछा, यहां तक ​​कि सही सत्य या झूठा मूल्य भी लौट रहा है। –

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