Регулярное выражение Javascript с проблемой замены глубоких объектов - PullRequest
0 голосов
/ 03 февраля 2011

Привет всем, возникла проблема при замене строки для кода механизма шаблонов, который я пишу. Если мои токены 1 уровня, все работает нормально. Пример {someProperty}. Но если я пытаюсь найти вложенный объект, он никогда не заменит. Пример {myobj.deep.test}. Я приложил код, с которым я играю. Спасибо за помощь!

function replaceStuff(content, fieldName, fieldValue) { 
    var regexstr = "{" + fieldName + "}";
    console.log("regexstr: ", regexstr);
    //var regex = new RegExp("{myobj\.deep\.test}", "g"); //this works as expected
    var regex = new RegExp(regexstr, "g"); //this doesn't
    return content.replace(regex, fieldValue);
}

replaceStuff("test: {myobj.deep.test}", "myobj.deep.test", "my value");

Ответы [ 2 ]

1 голос
/ 03 февраля 2011

См. этот ТАК вопрос о фигурных скобках. Возможно, ваш браузер не такой понимающий, как Chrome?

0 голосов
/ 03 февраля 2011

Вам нужно убежать от «.» символы в строке, которую вы передаете как параметр fieldName. То же самое касается любых других специальных символов регулярных выражений, которые вы хотите интерпретировать буквально. По сути, fieldName рассматривается как часть шаблона регулярного выражения.

Если вы не хотите, чтобы fieldName оценивалось как код регулярного выражения, вы можете рассмотреть возможность использования вместо этого манипуляции со строками.

Редактировать: Я просто запустил ваш код в FireFox, и он работал отлично. У вас здесь может быть что-то еще.

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