Ich bin gerade von einer Google-Suche zu diesem Beitrag gekommen, um zu überprüfen, ob eine Zeichenfolge einer anderen Zeichenfolge entspricht.
Ich verwende HandlebarsJS auf der NodeJS-Serverseite, aber ich verwende auch dieselben Vorlagendateien im Front-End, indem ich die Browserversion von HandlebarsJS verwende, um sie zu analysieren. Das bedeutete, wenn ich einen benutzerdefinierten Helfer haben wollte, musste ich ihn an zwei verschiedenen Stellen definieren oder dem betreffenden Objekt eine Funktion zuweisen - zu viel Aufwand !!
Was die Leute vergessen, ist, dass bestimmte Objekte Vererbungsfunktionen haben, die in der Schnurrbartvorlage verwendet werden können. Im Fall einer Zeichenfolge:
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.
Wir können diese Methode verwenden, um entweder ein Array von Übereinstimmungen zurückzugeben oder null
wenn keine Übereinstimmungen gefunden wurden. Dies ist perfekt, da Sie sich die Dokumentation zu HandlebarsJS unter http://handlebarsjs.com/builtin_helpers.html ansehen
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.
Damit...
{{#if your_string.match "what_youre_looking_for"}}
String found :)
{{else}}
No match found :(
{{/if}}
AKTUALISIEREN:
Nach dem Testen in allen Browsern funktioniert dies unter Firefox nicht . HandlebarsJS übergibt andere Argumente an einen Funktionsaufruf. Wenn also String.prototype.match aufgerufen wird, scheint das zweite Argument (dh die Regexp-Flags für den Aufruf der Übereinstimmungsfunktion gemäß obiger Dokumentation) übergeben zu werden. Firefox sieht dies als veraltete Verwendung von String.prototype.match an und bricht daher ab.
Eine Problemumgehung besteht darin, einen neuen funktionalen Prototyp für das String JS-Objekt zu deklarieren und stattdessen Folgendes zu verwenden:
if(typeof String.includes !== 'function') {
String.prototype.includes = function(str) {
if(!(str instanceof RegExp))
str = new RegExp((str+'').escapeRegExp(),'g');
return str.test(this);
}
}
Stellen Sie sicher, dass dieser JS-Code enthalten ist, bevor Sie die Funktion Handlebars.compile () und dann in Ihrer Vorlage ausführen ...
{{#your_string}}
{{#if (includes "what_youre_looking_for")}}
String found :)
{{else}}
No match found :(
{{/if}}
{{/your_string}}