2010-01-07 8 views
21
var string = 'abcd+1'; 
var pattern = 'd+1' 
var reg = new RegExp(pattern,''); 
alert(string.search(reg)); 

मैं कल रात को पता चला है कि अगर आप कोशिश करते हैं और एक जावास्क्रिप्ट नियमित अभिव्यक्ति के साथ पाठ की एक स्ट्रिंग में धन चिह्न मिल जाए, यह विफल रहता है। यह उस पैटर्न को नहीं मिलेगा, भले ही वह उस स्ट्रिंग में मौजूद हो। यह एक विशेष चरित्र के कारण होना चाहिए। टेक्स्ट के टुकड़े में प्लस साइन ढूंढने का सबसे अच्छा तरीका क्या है? इसके अलावा, यह अन्य पात्रों पर असफल रहेगा?नियमित अभिव्यक्ति में ढूँढना प्लस चिह्न

उत्तर

43

प्लस नियमित अभिव्यक्तियों में a special character है, इसलिए चरित्र को डेटा के रूप में व्यक्त करने के लिए इसे \ के साथ उपसर्ग करके इसे बचाना चाहिए।

var reg = /d\+1/; 
2

आपको अपने पैटर्न में + के सामने भागने वाले चरित्र का उपयोग करना चाहिए। जैसे। \ +

+1

नहीं है जब एक स्ट्रिंग से एक रेगुलर एक्सप्रेशन से निर्माण init regex वस्तु -

स्ट्रिंग '\\' रूप '\' (>'\+''\\+') से बच जाएगा। "\ +" "+" जैसा ही है, इसे "\\ +" होना होगा। – Quentin

+0

@ डेविड, क्या आपका मतलब सी # में उदाहरण है? उस स्थिति में मैं आमतौर पर @ verbatim स्ट्रिंग वर्ण का उपयोग बहुत से \\\\\ प्रतीकों से बचने के लिए करता हूं;) – Ash

+0

@Ash: नहीं। उदाहरण के लिए, var pattern = new RegExp ("(\\ d +) \\ s * \ \ + \\ s * (\\ d +) "); var पैटर्न =/(\ d +) \ s * \ + \ s * (\ d +)/के बराबर है; – Anonymous

2

आप शायद धन चिह्न से बचने के लिए की जरूरत है:

var pattern = /d\+1/ 

धन चिह्न नियमित अभिव्यक्ति में प्रयोग किया जाता है 1 या अधिक वर्ण नहीं संकेत मिलता है।

+0

नहीं, या तो इसे एक वास्तविक RegExp ऑब्जेक्ट बनाने के लिए पैटर्न के चारों ओर अपने उद्धरण हटा दें, या अपने बैकस्लैश से पहले एक अतिरिक्त बैकस्लैश जोड़ें। बैकस्लैश जावास्क्रिप्ट तारों में एक भागने अनुक्रम की शुरुआत इंगित करता है। – JPot

19
\-\.\/\[\]\\ **always** need escaping 
\*\+\?\)\{\}\| need escaping when **not** in a character class- [a-z*+{}()?] 

लेकिन यदि आप अनिश्चित हैं, तो किसी गैर-शब्द चरित्र से पहले भागने को शामिल करने में कोई हानि नहीं होती है जिसे आप मिलान करने का प्रयास कर रहे हैं।

एक अंक या अक्षर एक शब्द चरित्र है, एक अंक से बचने से पिछले मैच को संदर्भित किया जाता है, एक पत्र से बचने से एक अनपेक्षित चरित्र मिल सकता है, जैसे एक न्यूलाइन (\ n), टैब (\ t) या शब्द सीमा (\ b), या वर्णों का ए सेट, किसी भी शब्द-चरित्र (\ w), किसी भी गैर-शब्द वर्ण (\ W) की तरह।

जब तक आप इसका मतलब न लें तो एक पत्र या अंक से बचें।

+0

परिभाषित ** गैर-शब्द **। ;-) – Tomalak

+1

@ टोमालक: [^ ए-ज़ा-जे 0-9_] https://developer.mozilla.org/En/Core_JavaScript_1.5_Guide/Regular_Expressions – Anonymous

+0

+1 (वर्णित कोई इरादा नहीं) चरित्र वर्ग – User

11

बस एक ध्यान दें,

\ RegExp पैटर्न स्ट्रिंग में \\ होना चाहिए, RegExp("d\+1") काम नहीं करेगा और Regexp(/d\+1/) त्रुटि मिल जाएगा।

var string = 'abcd+1'; 
var pattern = 'd\\+1' 
var reg = new RegExp(pattern,''); 
alert(string.search(reg)); 
//3 
+0

का उल्लेख करने के लिए यह काम करेगा एक चरित्र समूह के भीतर जैसे '[एजेड \\ +] '? –

0

यह var pattern = '/d\\+1/' होना चाहिए। इसलिए साथ /d\+1/

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