coldfusion
RegExp के साथ कार्य करना कॉलबैक को बदलें
खोज…
परिचय
यदि आप सामान्य नियमित अभिव्यक्ति के साथ एक साधारण स्ट्रिंग प्रतिस्थापन से अधिक चाहते हैं, तो आप निश्चित रूप से परेशानी में पड़ते हैं और दीवार को हिट करते हैं जब रेगेक्स फ़ंक्शन की सीमा की खोज की जाती है कोल्डफ्यूज़न। Php के preg_replace_callback जैसा कोई बिल्ड-इन फ़ंक्शन नहीं है।
पैरामीटर
| पैरामीटर | विवरण |
|---|---|
re | नियमित अभिव्यक्ति |
str | स्ट्रिंग जिसे रेगेक्स लागू किया जाना चाहिए |
callback | फ़ंक्शन जहां कैप्चर किए गए समूह को पास किया जाएगा यदि एक मैच पाया गया था। वहां मैचों को संसाधित किया जा सकता है |
टिप्पणियों
क्योंकि कोल्डफ्यूज़न स्वयं ही यह प्रस्तावित नहीं करता है कि हम क्या चाहते हैं, हम जावा की विविधता के लिए सहारा लेते हैं, जो है - जैसा कि हम सभी जानते हैं - कोल्डफ्यूज़न के शीर्ष पर। जावा हमें java.util.regex.Pattern प्रदान करता है।
तो यहाँ वही है जो हम वास्तव में करते हैं:
-
Patternक्लास ऑब्जेक्ट सेCompileविधि और इसके लिए रेगेक्स पैटर्न को पास करना (जो संभवत: उपयोग के लिए रेगेक्स पैटर्न जमा करता है) को लागू करें। -
Matcherविधि क्याMatcherऔर स्ट्रिंग को पास करना है, जहां पैटर्न निष्पादित किया जाना चाहिए, परMatcherविधि को लागूCompile। - टेस्ट करता है, तो मिलान लागू द्वारा सफल हो गया था
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
});