validate regulares regexp multiple expresiones commas all javascript regex replace

regulares - JavaScript replace/regex



replace multiple javascript (3)

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 utilizando el método de replace , creo que puede pasar una cadena en lugar de una expresión regular para replace .

De lo contrario, primero tendría que escapar de los caracteres especiales de expresiones regulares en el patrón, tal vez así:

function reEscape(s) { return s.replace(/([.*+?^$|(){}/[/]])/mg, "//$1"); } // ... var re = new RegExp(reEscape(pattern), "mg"); this.markup = this.markup.replace(re, value);

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 puedo hacer que this.markup.replace() reemplace globalmente? Este es 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, entonces 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 .


Necesita duplicar los caracteres RegExp (una vez para la barra en la cadena y una para la expresión regular):

"$TESTONE $TESTONE".replace( new RegExp("//$TESTONE","gm"),"foo")

De lo contrario, busca el final de la línea y ''TESTONE'' (que nunca encuentra).

Personalmente, no soy un gran fan de la construcción de regexp usando cadenas por esta razón. El nivel de escape que se necesita puede llevarlo a beber. Estoy seguro de que otros se sienten diferentes y les gusta beber cuando escriben expresiones regulares.


Su patrón de expresiones regulares debe tener el modificador g:

var pattern = /[somepattern]+/g;

nota la g al final. le dice al sustituto que haga un reemplazo global.

Además, no necesita usar el objeto RegExp para construir su patrón como se indicó anteriormente. Patrón de ejemplo:

var pattern = /[0-9a-zA-Z]+/g;

un patrón siempre está rodeado por / en 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):

var pattern = /[0-9a-zA-Z]+/g; repeater.replace(pattern, "1234abc");

Pero necesitarías cambiar tu función de reemplazo a esto:

this.markup = this.markup.replace(pattern, value);