2015-05-16 12 views
5

मेरे पास एक स्ट्रिंग है।जावास्क्रिप्ट RegExp '*' अपेक्षित काम नहीं कर रहा है

var string="ghtykj"; 
var pattern = "t*y"; 

जब मैं नई RegExp (पैटर्न) .test (स्ट्रिंग), यह सच रिटर्न दे (उम्मीद के रूप में)।

var pattern = "t*g"; 

लेकिन यह पैटर्न भी सच हो जाता है।

मैं इस पैटर्न को झूठी वापसी की उम्मीद कर रहा था, क्योंकि टी * जी का अर्थ है शून्य या अधिक संख्या में वर्णों के बाद, जी के बाद।

यदि यह वास्तव में अपेक्षित व्यवहार है, तो क्या कोई मुझे सही कर सकता है जहां मैं गलत कर रहा हूं?

+0

आप ग्लोब के साथ नियमित अभिव्यक्ति को भ्रमित करते हैं: http: //en.wikipedia।संगठन/विकी/ग्लोब_% 28 प्रोग्रामिंग% 2 9 –

उत्तर

8

* नियमित अभिव्यक्ति में वाइल्डकार्ड वर्ण नहीं है, एक क्वांटिफायर है। इसका क्वांटिफायर {0,} जैसा ही अर्थ है, यानी यह निर्दिष्ट करना कि इससे पहले अभिव्यक्ति (इस मामले में वर्ण t) शून्य या अधिक बार हो सकता है।

पैटर्न t*g का अर्थ शून्य या अधिक संख्या में वर्णों के बाद नहीं है, इसके बाद जी। इसका मतलब शून्य या अधिक वर्ण टी है, उसके बाद एक जी।

पैटर्न t*g उदाहरण के लिए tg या tttttg से मेल खाता है, लेकिन यह भी g है। इसलिए, यह स्ट्रिंग की शुरुआत में g वर्ण से मेल खाता है।

एक पैटर्न प्राप्त करने के लिए जो शून्य से मेल खाता है या उसके बाद वर्णों की संख्या, उसके बाद आप t.*g (या t[\w\W]*g स्ट्रिंग में लाइन ब्रेक को संभालने के लिए) का उपयोग करेंगे।

1
var pattern = "t.*g"; 

सही होना चाहिए। t* का अर्थ है 0 या किसी भी संख्या में टी, जो सच है

6

क्योंकि टी * जी का मतलब है शून्य के बाद शून्य या अधिक संख्या में वर्ण, जी के बाद।

यह गलत है। इसका मतलब 0 या अधिक t है, इसलिए t वैकल्पिक है।

आप टर्मिनल गोले में ग्लोबिंग के बजाय सोच रहे हैं जहां * ऑपरेटर आपके अपेक्षित काम करेगा। हालांकि ग्लोबिंग * में RegEx * से अलग व्यवहार है।

आप

var pattern = "t.*g"; 

इसका मतलब यह है चाहता हूँ, . वैकल्पिक (0 या अधिक उदाहरण) है, लेकिन वहाँ एक t होना चाहिए।

नियमित अभिव्यक्तियों में, .matches almost any character

3

आपको अपने रेगेक्स का परीक्षण यहां करना चाहिए: regex101, यह आपके रेगेक्स को अंग्रेजी में अनुवादित करेगा ताकि इसे समझना आसान हो।

+1

यह एक टिप्पणी की तरह लगता है, लेकिन ठीक है –

+0

मैं कोई टिप्पणी नहीं जोड़ सकता b.c मेरे पास कम प्रतिनिधि है। – Zapp

+1

तो मैं आपको +10 प्रतिनिधि के साथ मदद करूंगा .. =) –

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