Acabei de chegar a este post de uma pesquisa no google sobre como verificar se uma string é igual a outra string.
Uso o HandlebarsJS no NodeJS, mas também os mesmos arquivos de modelo no front-end, usando a versão do navegador do HandlebarsJS para analisá-lo. Isso significava que, se eu quisesse um auxiliar personalizado, teria que defini-lo em 2 lugares separados ou atribuir uma função ao objeto em questão - muito esforço !!
O que as pessoas esquecem é que certos objetos têm funções herdadas que podem ser usadas no modelo de bigode. No caso de uma string:
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.
Podemos usar esse método para retornar uma matriz de correspondências ou null
se nenhuma correspondência for encontrada. Isso é perfeito, porque olhar para a documentação do 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.
Assim...
{{#if your_string.match "what_youre_looking_for"}}
String found :)
{{else}}
No match found :(
{{/if}}
ATUALIZAR:
Após o teste em todos os navegadores, isso não funciona no Firefox . O HandlebarsJS passa outros argumentos para uma chamada de função, o que significa que, quando String.prototype.match é chamado, o segundo argumento (ou seja, os sinalizadores Regexp para a chamada de função de correspondência conforme a documentação acima) parece estar sendo passado. O Firefox vê isso como um uso obsoleto de String.prototype.match, e assim quebra.
Uma solução alternativa é declarar um novo protótipo funcional para o objeto String JS e usá-lo:
if(typeof String.includes !== 'function') {
String.prototype.includes = function(str) {
if(!(str instanceof RegExp))
str = new RegExp((str+'').escapeRegExp(),'g');
return str.test(this);
}
}
Verifique se esse código JS está incluído antes de executar sua função Handlebars.compile () e, em seguida, no seu modelo ...
{{#your_string}}
{{#if (includes "what_youre_looking_for")}}
String found :)
{{else}}
No match found :(
{{/if}}
{{/your_string}}