2010-03-16 11 views
6

मैं इस regex (जे एस) का उपयोग करने की कोशिश कर रहा हूँ:Regex टिप्पणी

/\/\*(.*)\*\//g 

/* 
sdandsads 
*/ 
कुछ भी नहीं के साथ

प्रतिस्थापित करने के लिए।

लेकिन यह काम नहीं कर रहा है! क्यूं कर? o_O

उत्तर

12

डॉट नई-पंक्तियों के अलावा सब कुछ .. (अगर dotall झूठी है)

तो या तो dotall (का उपयोग के रूप में अन्य उत्तर/टिप्पणियां इस जावास्क्रिप्ट में समर्थित नहीं है में उल्लेख किया है, लेकिन मैं करूँगा फैल जाती है इसे यहाँ संदर्भ)

/\/\*(.*)\*\//gs 

के लिए है या आपके किसी भाव में खाली स्थान के वर्ण \s जोड़ने

/\/\*((\s|.)*?)\*\//g 

एलन उसकी टिप्पणी में आपका उल्लेख जवाब मैं बहुत बजाय निम्न का उपयोग कर दी से एक बुरा प्रदर्शन .. (जो सब कुछ खाली स्थान के और सब कुछ गैर खाली स्थान के, तो सब कुछ करने के लिए अनुवाद ..)

/\/\*([\s\S]*?)\*\//g 
+0

कोई 's' (एकल लाइन) जावास्क्रिप्ट में मोड है, और' (। \ S |) 'अदालतों आपत्तिजनक बैक ट्रैकिंग। जेएस में न्यूलाइन सहित कुछ भी मिलान करने का मानक तरीका '[\ S \ s]' है। –

+0

@alan, '\ s | .' बैकट्रैकिंग के बारे में कोई लिंक? इसके बारे में और जानना चाहेंगे .. –

+1

एरिक कॉरी ने इसे यहां समझाया: http://stackoverflow.com/questions/2407870/javascript-regex-hangs-using-v8/2408599#2408599 आपदाजनक बैकट्रैकिंग की एक और सामान्य चर्चा के लिए , देखें http://www.regular-expressions.info/catastrophic.html –

4

दो समस्याओं:

  1. जावास्क्रिप्ट में, वहाँ कोई dotall संशोधक है। आपको [^] का उपयोग करने जैसी नई न्यूलाइन की अनुमति देने के लिए एक हैक का उपयोग करना होगा।
  2. आप लालची मिलान का उपयोग कर रहे हैं। यदि आपके इनपुट में कई टिप्पणियां हैं, तो उनके बीच सबकुछ खाया जाएगा।

समाधान:

/\/\*[^]*?\*\//g 

उदाहरण:

> '/*abc\ncde*/qqq/*iop\n\njj*/'.replace(/\/\*[^]*?\*\//g, '') 
qqq 
+1

+1, लालची नहीं बदला .. –

+0

घोंसला वाली टिप्पणियों के साथ काम नहीं करता है। आज़माएं: '/ * एबीसी/* xyz */def/*'। गैर लालची प्रकृति इसे पहली छोर टिप्पणी के साथ पहली प्रारंभिक टिप्पणी से मेल खाता है, और उसके बाद केवल 'def ' छोड़ा गया है। – InfinitiesLoop

+0

कभी-कभी-दिमाग, नेस्टेड टिप्पणियों को वास्तव में इस तरह से अनुमति नहीं दी जाती है। आंतरिक व्यक्ति बाहरी को समाप्त कर देगा। – InfinitiesLoop