regex जावास्क्रिप्ट में प्रश्न चिह्न से बचना


90

यह एक आसान सवाल है जो मुझे लगता है।

मैं जावास्क्रिप्ट में रेगेक्स का उपयोग कर एक स्ट्रिंग की घटना के लिए खोज करने की कोशिश कर रहा हूं जैसे:

 var content ="Hi, I like your Apartment. Could we schedule a viewing? My phone number is: ";

 var gent = new RegExp("I like your Apartment. Could we schedule a viewing? My", "g");

 if(content.search(gent) != -1){   
     alert('worked');     
 }          

यह ?चरित्र के कारण काम नहीं करता है .... मैंने इसके साथ भागने की कोशिश की \, लेकिन यह भी काम नहीं करता है। क्या ?एक विशेष चरित्र के बजाय शाब्दिक उपयोग करने का एक और तरीका है ?


इसके बारे में सबसे बुरी बात यह है कि यहां तक ​​कि एक रेगेक्स के बजाय एक स्ट्रिंग का उपयोग करने से यह समस्या होती है, जैसे str.search("?")कि निश्चित रूप से यह बग की तरह लगता है क्योंकि यह रेगेक्स नहीं है और इसे एक के रूप में नहीं माना जाना चाहिए। Ech
सिनटेक

जवाबों:


150

आपको इसे दो बैकस्लैश के साथ भागने की आवश्यकता है

\\?

अधिक जानकारी के लिए इसे देखें:

http://www.trans4mind.com/personal_development/JavaScript/Regular%20Expressions%20Simple%20Usage.htm


17
… एक रेगेक्स के लिए और एक स्ट्रिंग डिक्लेरेशन के लिए।
गुमबो

मनभावक! Regex के साथ काम करने के वर्षों के बाद, सोचा कि मैंने सब कुछ देखा है .. लेकिन नहीं, यहाँ आप जाओ। दोहरा पलायन। लगता है कि एक दिन मैं ट्रिपल देखूंगा।
जियो

26

आपको डबल स्लैश का उपयोग करना चाहिए:

var regex = new RegExp("\\?", "g");

क्यों? क्योंकि जावास्क्रिप्ट का \उपयोग स्ट्रिंग्स में पात्रों से बचने के लिए भी किया जाता है, इसलिए: "\"? हो जाता है:"?"

और "\\?", बन जाता है "\?"


16

आप उद्धरण के बजाय स्लैश के साथ अपने regexp को परिसीमित कर सकते हैं और फिर प्रश्न चिह्न से बचने के लिए एक बैकस्लैश कर सकते हैं। इसे इस्तेमाल करे:

var gent = /I like your Apartment. Could we schedule a viewing\?/g;

6

जब भी आपके पास एक ज्ञात पैटर्न होता है (यानी आप एक RegExp बनाने के लिए एक चर का उपयोग नहीं करते हैं), तो शाब्दिक रेगेक्स नोटेशन का उपयोग करें जहां आपको विशेष रेगेक्स मेटाचैकर से बचने के लिए एकल बैकस्लैश का उपयोग करना होगा:

var re = /I like your Apartment\. Could we schedule a viewing\?/g;
                               ^^                            ^^

जब भी आपको गतिशील रूप से एक RegExp का निर्माण करने की आवश्यकता होती है, तो आप एक शाब्दिक बैकस्लैश को निरूपित करने के लिए उनके लिए डबल बैकस्लैश का RegExpनिर्माण करने वाले निर्माण संकेतन का उपयोग करें :

var questionmark_block = "\\?"; // A literal ?
var initial_subpattern = "I like your Apartment\\. Could we schedule a viewing"; // Note the dot must also be escaped to match a literal dot
var re = new RegExp(initial_subpattern + questionmark_block, "g");

और यदि आप String.rawस्ट्रिंग शाब्दिक का उपयोग करते हैं, तो आप इसका उपयोग कर सकते हैं \(एक टेम्पलेट स्ट्रिंग शाब्दिक का उपयोग करने का एक उदाहरण देखें जहां आप रेगेक्स पैटर्न में चर डाल सकते हैं):

const questionmark_block = String.raw`\?`; // A literal ?
const initial_subpattern = "I like your Apartment\\. Could we schedule a viewing";
const re = new RegExp(`${initial_subpattern}${questionmark_block}`, 'g'); // Building pattern from two variables
console.log(re); // => /I like your Apartment\. Could we schedule a viewing\?/g

A-read: RegExp: MDN पर विवरण

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.