JavaScript заменить все странное поведение - PullRequest
1 голос
/ 23 августа 2011

Я хочу этот код:

function renderTemplate(temp,content){ 
    for (var i in temp){
        replace = new RegExp("["+i+"]",'g');
        content = content.replace(i,temp[i]);
    }
    return content;
}
var temp = {'status':'ok','id':150};
var content = "your status is [status], again! your status is [status], and your id is [id], yes[id]";

alert(renderTemplate(temp,content));

Для создания этой строки:

your status is ok, again! your status is ok, and your id is 150, yes 150

Вместо этого я получаю:

your ok is [status], again! your status is [status], and your 150 is [id], yes[id]

Посмотрите, где был размещен ok ....

Вы можете запустить его здесь: http://jsfiddle.net/v9vzd/

Спасибо

Ответы [ 2 ]

2 голосов
/ 23 августа 2011

Хотя хороший ответ Адриана Ланга должен помочь вам, я бы сказал, что вы не используете лучший подход.Компиляция регулярных выражений из переменной может быть неудобной, когда дело доходит до экранирования, и обычно она медленнее с точки зрения производительности.

Если бы это был я, я бы воспользовался возможностью передать функцию в replace():

function renderTemplate(temp, content) {
    return content.replace(/\[([^[\]+)\]/g, function ($0, key) {
        return temp[key];
    });
}

Рабочая демонстрация: http://jsfiddle.net/AKsHb/

Это работает, потому что захват подвыражения ([^\]]+) передается замещающей функции в качестве второго аргумента - помеченного key в нашей функции выше - и это соответствует чему-либо между литералом [ и ].

2 голосов
/ 23 августа 2011

Попробуйте следующий код:

function renderTemplate(temp,content){ 
    for (var i in temp){
        replace = new RegExp("\\["+i+"\\]",'g');
        content = content.replace(replace,temp[i]);
    }
    return content;
}
var temp = {'status':'ok','id':150};
var content = "your status is [status], again! your status is [status], and your id is [id], yes[id]";

alert(renderTemplate(temp,content));

Вы не использовали созданный вами объект RegExp.Кроме того, квадратные скобки создают класс символов, поэтому вы должны избегать квадратных скобок (и в вызове конструктора RegExp вы должны избегать экранирующей обратной косой черты, так что это две обратных косых черты).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...