使用jQuery和regex替换自定义变量

时间:2014-04-09 14:56:34

标签: jquery regex

我正在尝试使用数组中的值替换内容块中的某些自定义变量标记。我目前有一些工作代码可以成功替换看起来像%([variable_name])%的变量但是,我需要它来替换看起来像<%[variable_name]%&gt的变量; 即可。几个小时后我一直在乱用下面的代码,而且我无法绕着正则表达式部分缠绕我的头部,并使用我的新变量格式使其正常工作。

以下是目前适用于%([variable_name])%的代码,如何才能使其适用于<%[variable_name]%>

$.each(data, function(key, value){
    var our_key = "%(["+key+"])%";
    our_key = our_key.replace(/([.?*+^$[\]\\(){}|-])/g, "\\$1");
    var regex = new RegExp(our_key, 'g');
    new_contents = new_contents.replace(regex,value);
});

编辑:真正的问题是我使用jquery'.html()'属性来抓取我的“new_contents”,它正在替换我的'<'和'>'与'& LT;”和'& GT;'

2 个答案:

答案 0 :(得分:1)

尝试将"%(["+key+"])%"替换为"<%["+key+"]%>"

$.each(data, function(key, value){
    var our_key = "<%["+key+"]%>";
    our_key = our_key.replace(/([.?*+^$[\]\\(){}|-])/g, "\\$1");
    var regex = new RegExp(our_key, 'g');
    new_contents = new_contents.replace(regex,value);
});

答案 1 :(得分:1)

为什么不反过来呢?

var replacementMap = {
        "name": "John Doe"
    },
    text = "Hello <%[name]%>!";

text = text.replace(/<%\[([^\]]+)\]%>/g, function(match, key) {
    return replacementMap[key] || match;
});

console.log(text);    // "Hello John Doe!"

fiddle