Dada esta función:
function Repeater(template) {
var repeater = {
markup: template,
replace: function(pattern, value) {
this.markup = this.markup.replace(pattern, value);
}
};
return repeater;
};
¿Cómo hago para this.markup.replace()
reemplazar globalmente? Aquí está el problema. Si lo uso así:
alert(new Repeater("$TEST_ONE $TEST_ONE").replace("$TEST_ONE", "foobar").markup);
El valor de la alerta es "foobar $ TEST_ONE".
Si cambio Repeater
a lo siguiente, no se reemplaza nada en Chrome:
function Repeater(template) {
var repeater = {
markup: template,
replace: function(pattern, value) {
this.markup = this.markup.replace(new RegExp(pattern, "gm"), value);
}
};
return repeater;
};
... y la alerta es $TEST_ONE $TEST_ONE
.
fuente
/pattern/
onew RegExp("pattern")
.En términos de interpretación de patrones, no hay diferencia entre las siguientes formas:
/pattern/
new RegExp("pattern")
Si desea reemplazar una cadena literal usando el
replace
método, creo que puede pasar una cadena en lugar de una expresión regular areplace
.De lo contrario, primero tendría que escapar de los caracteres especiales de expresiones regulares en el patrón, tal vez así:
fuente
Su patrón de expresiones regulares debe tener el modificador g:
observe la g al final. le dice al reemplazador que haga un reemplazo global.
Además, no necesita usar el objeto RegExp, puede construir su patrón como se indica arriba. Patrón de ejemplo:
un patrón siempre está rodeado por / a cada lado, con modificadores después del / final, siendo el modificador g el global.
EDITAR: ¿Por qué importa si el patrón es una variable? En su caso, funcionaría así (observe que el patrón sigue siendo una variable):
Pero necesitaría cambiar su función de reemplazo a esto:
fuente