बस इस पोस्ट पर गूगल सर्च से आया कि कैसे एक स्ट्रिंग दूसरे स्ट्रिंग के बराबर होती है।
मैं NodeJS सर्वर-साइड में HandlebarsJS का उपयोग करता हूं, लेकिन मैं इसे पार्स करने के लिए HandlebarsJS के ब्राउज़र संस्करण का उपयोग करके फ्रंट-एंड पर समान टेम्प्लेट फ़ाइलों का भी उपयोग करता हूं। इसका मतलब यह था कि अगर मैं एक कस्टम सहायक चाहता था, तो मुझे इसे 2 अलग-अलग जगहों पर परिभाषित करना होगा, या प्रश्न में ऑब्जेक्ट को एक फ़ंक्शन असाइन करना होगा - बहुत अधिक प्रयास !!
जो लोग भूल जाते हैं वह यह है कि कुछ वस्तुओं में विरासत के कार्य होते हैं जिनका उपयोग मूंछ के खाके में किया जा सकता है। एक स्ट्रिंग के मामले में:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/match
An Array containing the entire match result and any parentheses-captured matched results; null if there were no matches.
हम इस पद्धति का उपयोग करके या null
तो मिलान कर सकते हैं, या यदि कोई मिलान नहीं मिला। यह एकदम सही है, क्योंकि HandlebarsJS प्रलेखन http://handlebarsjs.com/builtin_helpers.html को देख रहा है
You can use the if helper to conditionally render a block. If its argument returns false, undefined, null, "", 0, or [], Handlebars will not render the block.
इसलिए...
{{#if your_string.match "what_youre_looking_for"}}
String found :)
{{else}}
No match found :(
{{/if}}
अपडेट करें:
सभी ब्राउज़रों पर परीक्षण के बाद, यह फ़ायरफ़ॉक्स पर काम नहीं करता है । HandlebarsJS एक फ़ंक्शन कॉल के लिए अन्य तर्क पास करता है, जिसका अर्थ है कि जब String.prototype.match कहा जाता है, तो दूसरा तर्क (यानी ऊपर दिए गए दस्तावेज़ के अनुसार मैच फ़ंक्शन कॉल के लिए Regexp झंडे) पास किया जा रहा है। फ़ायरफ़ॉक्स इसे String.prototyp.match के एक पदावनत उपयोग के रूप में देखता है, और इसलिए टूट जाता है।
एक स्ट्रिंग स्ट्रिंग JS ऑब्जेक्ट के लिए एक नया कार्यात्मक प्रोटोटाइप घोषित करना है , और इसके बजाय इसका उपयोग करना है:
if(typeof String.includes !== 'function') {
String.prototype.includes = function(str) {
if(!(str instanceof RegExp))
str = new RegExp((str+'').escapeRegExp(),'g');
return str.test(this);
}
}
सुनिश्चित करें कि यह JS कोड आपके Handlebars.compile () फ़ंक्शन को चलाने से पहले शामिल किया गया है, फिर अपने टेम्पलेट में ...
{{#your_string}}
{{#if (includes "what_youre_looking_for")}}
String found :)
{{else}}
No match found :(
{{/if}}
{{/your_string}}