खोज…


परिचय

यदि आप सामान्य नियमित अभिव्यक्ति के साथ एक साधारण स्ट्रिंग प्रतिस्थापन से अधिक चाहते हैं, तो आप निश्चित रूप से परेशानी में पड़ते हैं और दीवार को हिट करते हैं जब रेगेक्स फ़ंक्शन की सीमा की खोज की जाती है कोल्डफ्यूज़न। Php के preg_replace_callback जैसा कोई बिल्ड-इन फ़ंक्शन नहीं है।

पैरामीटर

पैरामीटर विवरण
re नियमित अभिव्यक्ति
str स्ट्रिंग जिसे रेगेक्स लागू किया जाना चाहिए
callback फ़ंक्शन जहां कैप्चर किए गए समूह को पास किया जाएगा यदि एक मैच पाया गया था। वहां मैचों को संसाधित किया जा सकता है

टिप्पणियों

क्योंकि कोल्डफ्यूज़न स्वयं ही यह प्रस्तावित नहीं करता है कि हम क्या चाहते हैं, हम जावा की विविधता के लिए सहारा लेते हैं, जो है - जैसा कि हम सभी जानते हैं - कोल्डफ्यूज़न के शीर्ष पर। जावा हमें java.util.regex.Pattern प्रदान करता है।

तो यहाँ वही है जो हम वास्तव में करते हैं:

  1. Pattern क्लास ऑब्जेक्ट से Compile विधि और इसके लिए रेगेक्स पैटर्न को पास करना (जो संभवत: उपयोग के लिए रेगेक्स पैटर्न जमा करता है) को लागू करें।
  2. Matcher विधि क्या Matcher और स्ट्रिंग को पास करना है, जहां पैटर्न निष्पादित किया जाना चाहिए, पर Matcher विधि को लागू Compile
  3. टेस्ट करता है, तो मिलान लागू द्वारा सफल हो गया था find क्या पर विधि Matcher विधि लौट आए।

यदि matcher.find() true , तो हम कह सकते हैं कि "यह बात है", लेकिन एक छोटी सी बात है जिस पर हमें विचार करना है: जावा का पैटर्न ऑब्जेक्ट समूहों को संग्रहीत करता है और हमें एक अन्य फ़ंक्शन के माध्यम से पहुंच प्रदान करता है, जो हमेशा के लिए सबसे अच्छा तरीका नहीं है आगे की प्रक्रिया और यह नहीं कि लगातार अन्य प्रोग्रामिंग भाषाएं इस मामले को कैसे संभालती हैं। इसलिए हम matcher.group() पर लूप करते हैं ताकि हम कॉलबैक फ़ंक्शन में कैप्चर किए गए समूहों से युक्त एक सरणी पास कर सकें। और अब हम कह सकते हैं: "यह बात है!"

उपयोगकर्ता परिभाषित REReplaceCallback फ़ंक्शन

function REReplaceCallback(re,str,callback) {
    /*
        Thanks to Ben Nadel
        "Learning ColdFusion 8: REMatch() For Regular Expression Matching"
        from 2007-06-13
        https://www.bennadel.com/blog/769-learning-coldfusion-8-rematch-for-regular-expression-matching.htm
    */
    pattern = CreateObject("java","java.util.regex.Pattern").Compile(Arguments.re);
    matcher = pattern.Matcher(Arguments.str);
    if(matcher.find()) {
        groups = [];
        for(var i = 1; i lte matcher.groupCount(); i++) {
            ArrayAppend(groups,matcher.group(Val(i)));
        }
        return Arguments.callback(groups);
    }
    else {
        return Arguments.callback(false);
    }
}

REReplaceCallback फ़ंक्शन का उपयोग करना

REReplaceCallback('YOUR REGEX GOES HERE','AND YOUR STRING HERE',function(groups) {
    //now you can access the 'groups' array containing all the captured groups
    return result; //return whatever you've processed inside
});


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow