2008-09-23 15 views
5

मुझे एक ऐसा फ़ंक्शन मिला है जो उपयोगकर्ता द्वारा उत्पन्न रेगेक्स चलाता है। हालांकि, यदि उपयोगकर्ता एक रेगेक्स में प्रवेश करता है जो दौड़ नहीं पाएगा तो यह बंद हो जाता है और गिर जाता है। मैंने कोशिश/पकड़ ब्लॉक में रेखा को लपेटने की कोशिश की है लेकिन कुछ भी नहीं होता है।जावास्क्रिप्ट कोशिश करें/पकड़ें

यदि यह मदद करता है, तो मैं jQuery चला रहा हूं लेकिन नीचे दिए गए कोड में यह नहीं है क्योंकि मैं अनुमान लगा रहा हूं कि यह उससे थोड़ा अधिक मौलिक है।

संपादित करें: हाँ, मुझे पता है कि मैं "[", यह जानबूझकर और प्रश्न का बिंदु से बच नहीं रहा हूं। मैं उपयोगकर्ता इनपुट स्वीकार कर रहा हूं और मैं इस तरह की समस्या को पकड़ने के लिए एक रास्ता खोजना चाहता हूं बिना आवेदन के चेहरे पर फ्लैट गिर रहा है।

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html> 
<head> 
    <title>Regex</title> 

    <script type="text/javascript" charset="utf-8"> 
     var grep = new RegExp('gr['); 

     try 
     { 
      var results = grep.exec('bob went to town'); 
     } 
     catch (e) 
     { 
      //Do nothing? 
     } 

     alert('If you can see this then the script kept going'); 
    </script> 
</head> 
<body> 

</body> 
</html> 
+4

मैंने इसे कम से कम 4 बार प्रमाणित किया था। यह किसी और का मामला है कि आप उस मूर्खतापूर्ण गलती को देखते हुए इतना बेहतर हो, तो आप इसे अपने आप पार कर सकते हैं। – Teifion

+1

@ गेफ्री: दरअसल, यह जावास्क्रिप्ट है। –

उत्तर

17

इस नए RegExp अपवाद

Regex

<script type="text/javascript" charset="utf-8"> 
      var grep; 

      try { 
        grep = new RegExp("gr["); 
      } 
      catch(e) { 
        alert(e); 

      } 
      try 
      { 
        var results = grep.exec('bob went to town'); 
      } 
      catch (e) 
      { 
        //Do nothing? 
      } 

      alert('If you can see this then the script kept going'); 
    </script> 
फेंक रहा है की कोशिश करो

8

समस्या इस लाइन के साथ है:

var grep = new RegExp('gr['); 

'[' विशेष वर्ण है, इसलिए यह बच गया की जरूरत है। इसके अलावा यह लाइन कोशिश में लपेटा नहीं है ... पकड़ो, तो आपको अभी भी त्रुटि मिलती है।

संपादित: तुम भी त्रुटि संदेश देखने के लिए पकड़ खंड में एक

alert(e.message); 

जोड़ सकते हैं। यह जावास्क्रिप्ट में सभी प्रकार की त्रुटियों के लिए उपयोगी है।

संपादित करें 2: ठीक है, मुझे प्रश्न को और अधिक सावधानीपूर्वक पढ़ने की जरूरत है, लेकिन उत्तर अभी भी वहां है। उदाहरण कोड में अपमानजनक लाइन कोशिश में लपेटा नहीं है ... पकड़ ब्लॉक। मैंने इसे वहां रखा और ओपेरा 9.5, एफएफ 3 और आई 7 में त्रुटियां नहीं मिलीं।

+0

आपने खुद ही प्रश्न खो दिया है – Teifion

+0

हाँ, मैंने अब पॉल के जवाब में देखा है। यह अतिरिक्त बेवकूफ होने का एक साधारण मामला था। वैसे भी मदद के लिए धन्यवाद :) – Teifion

1

अपने रेगुलर एक्सप्रेशन [

बंद नहीं होती है मेरी फ़ायर्फ़ॉक्स में, यह कभी नहीं निर्माता से लौटने - रेगुलर एक्सप्रेशन के कार्यान्वयन में एक बग की तरह दिखता है, लेकिन अगर आप एक वैध अभिव्यक्ति प्रदान करते हैं यह

काम करता है
+0

rslite के साथ, आप वास्तविक प्रश्न को याद कर चुके हैं, मैं इस तरह के रेगेक्स को चलाने और परिणामी त्रुटि को पकड़ने का एक तरीका ढूंढना चाहता हूं – Teifion

0

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

4
var grep, results; 

try { 
    grep = new RegExp("gr["); 
    results = grep.exec('bob went to town'); 
} 
catch(e) { 
    alert(e); 
} 
alert('If you can see this then the script kept going'); 
2

कोशिश अंदर RegExp प्रारंभ डाल/कैच काम करेंगे (सिर्फ फ़ायर्फ़ॉक्स में परीक्षण)


var grep, results; 

try 
{ 
    grep = new RegExp("gr["); // your user input here 
} 
catch(e) 
{ 
    alert("The RegExpr is invalid"); 
} 

// do your stuff with grep and results 
 

यहां पलायन समाधान नहीं है। चूंकि इस स्निपेट का उद्देश्य वास्तव में उपयोगकर्ता द्वारा जेनरेट किए गए RegExpr का परीक्षण करना है, तो आप [एक अनजान RegExpr कंटेनर के रूप में पकड़ना चाहते हैं।

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