Dada esta função:
function Repeater(template) {
var repeater = {
markup: template,
replace: function(pattern, value) {
this.markup = this.markup.replace(pattern, value);
}
};
return repeater;
};
Como faço a this.markup.replace()
substituição globalmente? Aqui está o problema. Se eu usar assim:
alert(new Repeater("$TEST_ONE $TEST_ONE").replace("$TEST_ONE", "foobar").markup);
O valor do alerta é "foobar $ TEST_ONE".
Se eu mudar Repeater
para o seguinte, nada será substituído no Chrome:
function Repeater(template) {
var repeater = {
markup: template,
replace: function(pattern, value) {
this.markup = this.markup.replace(new RegExp(pattern, "gm"), value);
}
};
return repeater;
};
... e o alerta é $TEST_ONE $TEST_ONE
.
javascript
regex
replace
testemunho
fonte
fonte
/pattern/
ounew RegExp("pattern")
.Em termos de interpretação de padrões, não há diferença entre as seguintes formas:
/pattern/
new RegExp("pattern")
Se você quiser substituir uma string literal usando o
replace
método, acho que você pode simplesmente passar uma string em vez de uma regexp parareplace
.Caso contrário, você teria que escapar de quaisquer caracteres especiais regexp no padrão primeiro - talvez assim:
fonte
Seu padrão regex deve ter o modificador g:
observe o g no final. diz ao substituto para fazer uma substituição global.
Além disso, você não precisa usar o objeto RegExp, você pode construir seu padrão como acima. Padrão de exemplo:
um padrão é sempre cercado por / em cada lado - com modificadores após o / final, sendo o modificador g o global.
EDIT: Por que importa se o padrão é uma variável? No seu caso, funcionaria assim (observe que o padrão ainda é uma variável):
Mas você precisaria alterar sua função de substituição para esta:
fonte