javascript - 正则表达式:在某些情况下不起作用

标签 javascript html regex

我是 regex 的新手并且正在练习它。首先检查这段代码:

$(".app").each(function(){
    var raw_string = $(this).html();
    var changed_string = raw_string.replace(/^\{\{|\}\}$/g, "");
    $(this).html(eval(changed_string));
});

我正在尝试查看 .app 的 HTML 并搜索以 mustache {{ 开头并以 mustache }} 结尾的任何内容。就像 Mustache.js 一样。首先,我将其替换为一个空字符串,然后将 .app 的 HTML 设置为 eval(changed_string)。所以如果我尝试:

<div class="app">

    {{2+2}}

</div>

工作绝对精细打印 4。但是:

问题

如果我向 .app 添加一些额外的 HTML:

<div class="app">

    2 and 2 are: {{2+2}}

</div>

输出是:

2 and 2 are: {{2+2}}

发生了什么???

JsFiddle Demonstration

最佳答案

修复表达式(匹配字符串的开头/结尾)仍然不能解决问题;您将尝试评估整个字符串,包括“2 和 2 是:...”。

试试这个,替换每个 {{...}} 对中的内容:

$(".app").each(function(){
    var raw_string = $(this).html();
    var changed_string = raw_string.replace(/\{\{(.+)\}\}/g, 
      function( match, p1 ) {
        return(eval(p1));
      }                                     
    );
    $(this).html(changed_string);
});

关于javascript - 正则表达式:在某些情况下不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25713387/

相关文章:

JavaScript 只允许在文本末尾添加数字

mysql - SQL-Server-2008 中的正则表达式

java - 仅当两个序列相同时才匹配正则表达式

javascript - heroku无法向mlab写入数据

javascript - 无法在 GWT : "delete" method name treated as keyword? 中使用 JS (Harmony) WeakMap

javascript - jquery bxslider 不能在 ng View 中使用模板

jquery - 获取第二个子元素

javascript - Ember linkedin api 身份验证 token 问题

javascript - html5 jquery 中的文本字段验证

html - 如何设置 <details> <summary> 元素的箭头样式?