Учитывая эту функцию:
function Repeater(template) {
var repeater = {
markup: template,
replace: function(pattern, value) {
this.markup = this.markup.replace(pattern, value);
}
};
return repeater;
};
Как сделать this.markup.replace()
глобальную замену? Вот в чем проблема. Если я использую это так:
alert(new Repeater("$TEST_ONE $TEST_ONE").replace("$TEST_ONE", "foobar").markup);
Значение предупреждения - «foobar $ TEST_ONE».
Если я изменюсь Repeater
на следующее, то в Chrome ничего не будет заменено:
function Repeater(template) {
var repeater = {
markup: template,
replace: function(pattern, value) {
this.markup = this.markup.replace(new RegExp(pattern, "gm"), value);
}
};
return repeater;
};
... и предупреждение есть $TEST_ONE $TEST_ONE
.
javascript
regex
replace
ядро
источник
источник
/pattern/
илиnew RegExp("pattern")
.С точки зрения интерпретации паттернов нет никакой разницы между следующими формами:
/pattern/
new RegExp("pattern")
Если вы хотите заменить буквальную строку с помощью этого
replace
метода, я думаю, вы можете просто передать строку вместо регулярного выражения вreplace
.В противном случае вам придется сначала экранировать любые специальные символы регулярного выражения в шаблоне - может быть, так:
источник
Ваш шаблон регулярного выражения должен иметь модификатор g:
обратите внимание на букву g в конце. он сообщает заменителю выполнить глобальную замену.
Также вам не нужно использовать объект RegExp, вы можете создать свой шаблон, как указано выше. Пример шаблона:
шаблон всегда окружен символом / с обеих сторон - с модификаторами после последнего /, причем модификатор g является глобальным.
РЕДАКТИРОВАТЬ: Почему это важно, если шаблон является переменной? В вашем случае это будет работать так (обратите внимание, что шаблон все еще является переменной):
Но вам нужно будет изменить функцию замены на это:
источник