javascript - 使用正则表达式在 HTML 中查找 Mustache 变量

标签 javascript regex mustache

我正在编写一些解析模板文件的代码,我要做的第一件事就是删除模板中的所有 Mustache 变量。在大多数情况下, mustache 变量如下所示:

{{variable}}, {{#loop}}{{content}}{{/loop}}, {{^not}}{{/not}}, {{! comment }}, {{#if}}{{/if}}

到目前为止,我一直在使用这个正则表达式替换,它可以很好地删除所有这些变量:

markup.replace(/\{\{[^\}\}]*\}\}/g, "")

我刚刚遇到了一个问题,但我发现了包含一些 javascript 代码的 Mustache 注释。

{{! App.doStuff('magic_string')({flag:true, flag2: true}); }}
  • 注意:注释中的 .js 代码不包含 }}

以前,我认为我的正则表达式会查找 {{ ,直到找到 }} (恰好是连续 2 个) ([^\}\}]),但情况似乎并非如此。一旦找到单个 },匹配就会停止,并且无法从模板文件中删除此注释,因为它无法匹配开始和结束 {{ }}.

问题:我的正则表达式应该如何更新,以便它从“{{”到“}}”匹配,而不会停在单个“}”?

<小时/>

运行示例:

"<p>{{! App.doStuff('magic_string')({flag:true, flag2: true}); }}</p>".replace(/\{\{[^\}\}]*\}\}/g, "");
"<p>{{! App.doStuff('magic_string')({flag:true, flag2: true}); }}</p>" 
// bad! - should be "<p></p>"

"<p>{{test}}</p>".replace(/\{\{[^\}\}]*\}\}/g, "");
"<p></p>" // good

"<p>{{#test}}{{.}}{{/test}}</p>".replace(/\{\{[^\}\}]*\}\}/g, "");
"<p></p>" // good

"<p>{{>partial}}</p>".replace(/\{\{[^\}\}]*\}\}/g, "");
"<p></p>" //good

"<p {{#flag}}class='fancy'{{/flag}}></p>".replace(/\{\{[^\}\}]*\}\}/g, "");
"<p class='fancy'></p>" //good

最佳答案

给你,

> "<p>{{! App.doStuff('magic_string')({flag:true, flag2: true}); }}</p>".replace(/\{\{(?:(?!}}).)*\}\}/g, "")
'<p></p>'

DEMO

说明:

\{                       '{'
\{                       '{'
(?:                      group, but do not capture (0 or more
                         times):
  (?!                      look ahead to see if there is not:
    }}                       '}}'
  )                        end of look-ahead
  .                        any character except \n
)*                       end of grouping
\}                       '}'
\}                       '}'

关于javascript - 使用正则表达式在 HTML 中查找 Mustache 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26395932/

相关文章:

javascript - Tampermonkey 脚本没有重定向到预期的 URL?

javascript - graphqlHTTP 不是函数

java - {{parent.child.0.field}} 它没有解决,如果 child 是 java.util.Set。如果它是 java.util.List 则有效

javascript - 使用上一个 HTML 页面中的文本框值填充表格

javascript - 在 Javascript 中从字符串中提取 URL

mysql - 如何删除最后出现的逗号,逗号本身可能不是 SQL 中字符串的最后一个字符

关于限制特定字符出现一次的正则表达式

php - 使用 REGEXP 在 MySQL 中搜索

java - Spring Boot 在加载页面时忽略 CSS/JS

javascript - 如何在模板节点中找到完整的数组