2010-09-01 6 views
7

जावा में, आप नियमित अभिव्यक्ति करने का प्रयास कर सकते हैं जो Pattern.compile("stackoverflow.com") का उपयोग कर URL stackoverflow.com से मेल खाएगा। लेकिन यह गलत होगा क्योंकि नियमित अभिव्यक्तियों में . का विशेष अर्थ है। इसे ठीक करने का सबसे आसान तरीका Pattern.compile(Pattern.quote("stackoverflow.com")) लिखना है जो Pattern.compile("\\Qstackoverflow.com\\E") पर आता है जो "quotes" the entire string है।जावास्क्रिप्ट में Java's "Pattern.quote" की कार्यक्षमता को दोहराएं Regéxp

मैं जावास्क्रिप्ट में एक ही बात करना चाहता हूँ, लेकिन जावास्क्रिप्ट के नियमित अभिव्यक्ति \Q और \E लिए कोई अर्थ नहीं सौंपते हैं और यह नहीं दिखता है वहाँ की तरह एक जावास्क्रिप्ट बराबर है, तो मुझे यकीन है कि कैसे जाने के लिए नहीं कर रहा हूँ इसके बारे में। मेरा पहला विचार (नीचे मेरा जवाब देखें) किसी भी चरित्र से पहले बैकस्लैश डालना है जिसका जावास्क्रिप्ट रेगेक्स में विशेष अर्थ है, लेकिन यह संभावित रूप से त्रुटि प्रवण प्रतीत होता है और मुझे संदेह है कि किसी को बेहतर तरीके से पता चल सकता है।

यह फ़ायरफ़ॉक्स एक्सटेंशन के लिए है इसलिए मोज़िला-विशिष्ट समाधान ठीक हैं।

+0

किसी को जो भविष्य में इस भर आता है और, मैं इसे एक अलग तरह से सुलझाने को समाप्त उत्सुक है। मैं एक रेगेक्स चाहता था जो '' 'के बाद एक विशेष स्ट्रिंग के बाद मेल खाता था, इसके बाद '' '। मैं बस कुछ/जैसे [/ "]] +"/'(उद्धरण, गैर-उद्धरण वर्णों का एक गुच्छा, फिर एक और उद्धरण) खोज रहा था और फिर उस विशेष स्ट्रिंग से मेल खाने वाले किसी भी व्यक्ति को ढूंढने के लिए सभी मैचों में जा रहा था मैं चाहता था। – MatrixFrog

उत्तर

6

मेरे सुझाव पर विस्तार से बता दें यह कुछ इस तरह दिखेगा:

// A RegExp that matches all the characters which have a special meaning in a RegExp 
var regexpSpecialChars = /([\[\]\^\$\|\(\)\\\+\*\?\{\}\=\!])/gi; 

मुझे यकीन है कि अगर यह काफी सही है, कुछ अक्षर के बाद से (जैसे ! और =) नहीं कर रहा हूँ केवल विशेष अर्थ है लगता है कुछ स्थितियों में। लेकिन यह सोचते हैं यह है कि, तो आप

var quotedURL = url.replace(regexpSpecialChars, '\\$1'); 

s '\$ साथ s' को बदलने के लिए, उदाहरण के लिए, सभी $ करना होगा। तो फिर तुम सिर्फ quotedURL से रेगुलर एक्सप्रेशन का निर्माण कर सकते हैं:

var myRegExp = new RegExp(quotedURL, 'gi'); 
+0

AFAIK, सबकुछ से बचकर पत्र और अंक काम करता है। यह परिणाम भी कम पठनीय बनाता है, लेकिन यह थोड़ा आसान है (और आईआईआरसी कहीं ऐसा बयान था कि यह अतिरिक्त कामों को उनके विशेष अर्थ के साथ भी काम करेगा, लेकिन अब मैं नहीं जानता कि यह किस भाषा के बारे में था: डी)। – maaartinus

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