【问题标题】:Find and replace with JavaScript使用 JavaScript 查找和替换
【发布时间】:2012-02-02 12:20:25
【问题描述】:

我正在尝试创建一个超级简单的 JavaScript 模板解决方案。我想使用 JavaScript replace 方法来查找模板中的所有花括号实例,并将它们替换为相应的数据。

例如,如果我的模板是:<p>My name is {{name}}. I am {{age}}.</p>

我想要结果:<p>My name is Olly. I am 19.</p>

到目前为止,这是我的代码:http://jsfiddle.net/2RkAG/

我试图让它自动替换每条数据,所以我不必明确告诉 JavaScript 替换什么。但是,这就是我遇到问题的地方。

【问题讨论】:

    标签: javascript replace templating


    【解决方案1】:

    $1 仅在您直接传递字符串时才有效。它不能按照您的方式工作,因为在将字符串传递给 .replace 之前评估了 person["$1"] - 而 person["$1"] 实际上是 undefined

    您可以改为传递函数:http://jsfiddle.net/2RkAG/1/。每次替换都会调用该函数,并且传递的参数等效于例如$1.

    $result.html(template.replace(/{{(.*?)}}/g, function(a, b) {
        return person[b]; // a = complete match, b = first group
    }));
    

    您也不需要转义第一个{

    【讨论】:

    • 非常感谢。太完美了。
    • 说,如果我想像这样使用模板怎么办:<p>My name is {{person.name}}. I am {{person.age}}.</p>。我已经和eval 一起工作了,但这是最好的方法吗?安全的?像这样:jsfiddle.net/2RkAG/20
    • @Oliver Joseph Ash:如果你不想要evaljsfiddle.net/2RkAG/24,你需要一些寻路算法。
    • @OliverJosephAsh - eval() 的安全性取决于输入的安全性。如果模板中只是您自己的代码,那么您可以相信输入不会是恶意的。如果输入不受您的控制,那么它可能被用来将任意代码注入您的页面,您必须评估其影响。有时这没有真正的风险(用户通常可以将代码注入到他们自己的页面中),有时它确实有风险——这取决于。
    猜你喜欢
    • 2021-06-01
    • 2016-03-04
    • 1970-01-01
    • 1970-01-01
    • 2014-09-01
    • 1970-01-01
    • 2012-04-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多