/ / जावास्क्रिप्ट के लिए Regex - जावास्क्रिप्ट, regex

जावास्क्रिप्ट के लिए Regex - जावास्क्रिप्ट, regex

मैं कुछ बुनियादी जावास्क्रिप्ट regex सीखने की कोशिश कर रहा हूँ। शुरुआत के रूप में, मैं प्रलेखन पढ़ा और यह SO सवाल: आप जावास्क्रिप्ट नियमित अभिव्यक्ति में मिलान किए गए समूहों तक कैसे पहुंचते हैं?

मुझे लगता है कि मैंने अभिव्यक्ति के अधिकांश को समझ लिया है:

/(?:^|s)format_(.*?)(?:s|$)/g

इस भाग को छोड़कर:

(.*?)

मुझे पता है कि

.*

किसी भी चरित्र के 0 या अधिक घटनाओं से मेल खाना है (न्यूलाइन या लाइन टर्मिनेटर को छोड़कर)।

लेकिन मैं यह नहीं समझ सकता कि क्यों

?

जरूरत है।

मैं कुछ इसी तरह से खेल रहा था:

/(?:^|s)ab(.*?)ab(?:s|$)/
" ab4545ab "

और चीजें उसके साथ या उसके बिना व्यवहार कर रही हैं

?

में

(.*?)

कोई विचार?

धन्यवाद!

उत्तर:

जवाब के लिए 5 № 1

यह बनाता है .* गैर लालची। इसका मतलब है कि रेगेक्स में अगले वैध वर्ण अनुक्रम की पहली घटना रोक दी जाएगी .*.

के बिना ?, द .* रेगेक्स में अगले वैध वर्ण अनुक्रम की अंतिम घटना तक उपभोग करेगा।

var s = "foo bar boo bar foo";

var greedy = /.*bar/;
var no_greed = /.*?bar/;

greedy.exec(s); // foo bar boo bar

no_greed.exec(s); // foo bar

तो लालची आखिरी "बार" में पहली बार "बार" से पहले खपत करता है।

गैर लालची केवल पहले "बार" में जाती है।


जवाब के लिए 4 № 2

The ? बाद एक .+ या .* मैच को बनाना होगा मैच आलसी डिफ़ॉल्ट के बजाय लालची. मतलब, यह संभव के रूप में कुछ अक्षर के रूप में मैच होगा, इसके विपरीत में के रूप में कई ।

उदाहरण:

"hello".match(/.+/)    //Returns ["hello"]
"hello".match(/.+?/)   //Returns ["h"]

जवाब के लिए 2 № 3

The ? quantifier को लालची बना देता है । इसके बिना * संभव के रूप में कई पात्रों के रूप में खा जाएगा, जो विशेष रूप से शक्तिशाली है .. हालांकि, ? वहां के रूप में आवश्यक के रूप में कुछ खा जाएगा ।

उदाहरण के लिए, यह स्ट्रिंग लें: "abcccbacba", और यह मैच के खिलाफ /abc(.*)ba/. यह होगा कब्जा करने में परिणाम ccbac. दूसरी ओर /abc(.*?)ba/ कब्जा करेंगे cc.