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

string replacement in javascript when contains `{}`

本文关键字:字符串 替换 javascript 包含      更新时间:2023-09-26

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

    <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'});

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

通过firebug,我发现模板是这样的:
.........<span class="titleText">${name}</span> <a target="_blank" href="detail?fid=$%7bid%7d" class="titleLink">Detail</a>.......

所以id没有被替换,如何修复?

看起来您的浏览器正在编码您的{}字符。你必须在你的regexp中考虑到这一点…

这是未经测试的,但是…/'$('{|%7b)('w*)('}|%7d)/

这个应该可以,或者类似的东西…这个想法是他们的想法。有时浏览器会对特殊字符做一些奇怪的事情。

EDIT:要匹配键(中间匹配的组),尝试使用传递给回调的第三个参数,如本例所示: