Щойно прийшов до цієї публікації з пошуку в Google про те, як перевірити, чи рядок дорівнює іншій рядку.
Я використовую HandlebarsJS в серверній частині NodeJS, але я також використовую ті самі файли шаблонів на передньому кінці, використовуючи браузерну версію HandlebarsJS для її розбору. Це означало, що якщо я хочу користувальницького помічника, мені доведеться визначити його у двох окремих місцях або призначити функцію для відповідного об'єкта - занадто багато зусиль !!
Що люди забувають, це те, що певні об’єкти мають успадковані функції, які можна використовувати в шаблоні вуса. У разі рядка:
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}}
ОНОВЛЕННЯ:
Після тестування на всіх браузерах це не працює на Firefox . HandlebarsJS передає інші аргументи до виклику функції, це означає, що при виклику String.prototype.match другий аргумент (тобто прапори Regexp для виклику функції відповідності, як показано у вищезазначеній документації), здається, передається. Firefox сприймає це як застаріле використання String.prototype.match, і так зривається.
Вирішення проблеми полягає в оголошенні нового функціонального прототипу для об'єкта String 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}}