2010-07-13 18 views
33

के साथ प्रतिस्थापित करें मैं साइटपॉइंट्स 2007 पुस्तक "बस जावास्क्रिप्ट" पढ़ रहा हूं और मुझे कुछ कोड का सामना करना पड़ा जो मैं समझ नहीं पा रहा हूं। है क्या मुझे पहेलियाँ, मुझे समझ नहीं आता जहां "$ 1" मूल्य से या क्या यह मतलब है आता है की जगह विधि के लिए

Core.removeClass = function(target, theClass) 
{ 
    var pattern = new RegExp("(^|)" + theClass + "(|$)"); 
    target.className = target.className.replace(pattern, "$1"); 
    target.className = target.className.replace(/ $/, ""); 
}; 

पहली कॉल:

यह निम्नलिखित कोड है। मैं सोचता हूं कि कॉल को "" के साथ मिले पैटर्न को प्रतिस्थापित करना चाहिए।

उत्तर

51

कोष्ठकों ( से प्रत्येक जोड़ी ... ) जहां पहला वर्ण कोई ? * नहीं है एक "कब्जा समूह" है, जो $1, $2, $3, आदि जो प्रतिस्थापन पैटर्न में इस्तेमाल किया जा सकता में अपने परिणाम देता है।

तुम भी (पुनरावृत्ति के लिए या वास्तव में मूल अभिव्यक्ति कभी कभी में,) \1 के रूप में एक ही बात देख सकते हैं, \2, \3 अन्य regex इंजन में,

ये "backreferences", कहा जाता है क्योंकि वे आम तौर पर संदर्भ दिया अभिव्यक्ति में (पहले) भाग का हिस्सा।

(* ? एक गैर पर कब्जा समूह है जो कब्जा करने के बिना (?: ... ) और बस समूहों है सहित विशेष व्यवहार के विभिन्न रूपों, इंगित करता है।)


अपने विशिष्ट उदाहरण में, $ 1 हो जाएगा समूह (^|) जो "स्ट्रिंग (शून्य-चौड़ाई), या एकल स्पेस कैरेक्टर की शुरुआत की स्थिति है"।

तो इसके साथ पूरी अभिव्यक्ति को प्रतिस्थापित करके, आप मूल रूप से परिवर्तनीय theClass और संभावित रूप से इसके बाद एक स्थान निकाल रहे हैं। (- एक अंतरिक्ष या स्ट्रिंग अंत स्थिति - समापन अभिव्यक्ति (|$) उल्टा होता है और के बाद से अपने मूल्य नहीं किया जाता है, बजाय (?: |$) के साथ गैर पर कब्जा हो सकता था।)


उम्मीद है कि इस सब कुछ ठीक बताते हैं - चलो मुझे पता है कि क्या आप और जानकारी चाहते हैं।

+0

धन्यवाद, यह अभी स्पष्ट है। मुझे "कोष्ठक की प्रत्येक जोड़ी" का अर्थ समझने में थोड़ा परेशानी थी, लेकिन यह रेगेक्स पैटर्न पर लागू होती है।यदि रेगेक्स पैटर्न में कोष्ठक की एक जोड़ी है तो यह एक कैप्चरिंग समूह है। –

7

$ 1 एक बैकरेफर है। इसे आपके रेगेक्स मैचों में पहले मिलान करने वाले समूह (कोष्ठक का सेट) द्वारा प्रतिस्थापित किया जाएगा।

+0

इस मामले में $ 1 कुछ भी नहीं होगा (यदि पहला समूह 0-चौड़ाई^रेखा वर्ण की शुरुआत से मेल खाता है) या एक स्थान (यदि पहला समूह किसी स्थान से मेल खाता है)। –

+1

नहीं, यह ** नहीं ** ** एक संदर्भ संदर्भ कहा जाता है। इसे "विशेष प्रतिस्थापन पैटर्न" कहा जाता है। –

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