包含`{}`时javascript中的字符串替换

时间:2013-06-07 02:17:27

标签: javascript

我使用模板和javascript为json数据生成htmls,这是tempalte:

    <div id="template">
        <div class="iwContainer">
            <div class="iwHeaderContainer">
                <div class="iw-title-container">
                    <span class="titleText">${name}</span> <a target="_blank" href="detail?fid=${id}" class="titleLink">Detail</a>
                </div>
            </div>
            <div class="iwRichContainer">
                <div class="iw-g-font">Address:${address}</div>
            </div>
            @{setsearchTemplate}
        </div>
    </div>

JS:

buildInfoContent : function(item) {
    var tmp = $("#template").html();
    if (tmp) {
        tmp = tmp.replace(/\$\{(\w*)\}/g, function(m, key) {
            return item.hasOwnProperty(key) ? item[key] : "";
        });
        return tmp;
    }
}

我称之为:

buildInfoContent({name:'name',id:2,address:'address'});

所有的palcehodler都被替换了${id}

通过萤火虫我发现temlate是这样的:

.........<span class="titleText">${name}</span> <a target="_blank" href="detail?fid=$%7bid%7d" class="titleLink">Detail</a>.......

所以id没有被替换,如何解决?

1 个答案:

答案 0 :(得分:1)

您的浏览器似乎正在编码{}个字符。你必须在正则表达式中考虑到这一点......

这是未经测试但...... /\$(\{|%7b)(\w*)(\}|%7d)/

这应该做到,或者类似的东西......这个想法是他们的。有时候浏览器会使用特殊字符做一些时髦的事情。

编辑:要匹配密钥(中间匹配的组),请尝试使用传递给回调的第3个参数,例如:Fiddle