solo - pasando variable a una expresión regular en javascript
probar expresiones regulares (4)
Posible duplicado:
Cadena de escape para usar en Javascript regex
Tengo un mensaje como este:
Máximo {0} caracteres permitidos en {1}
Y tengo una función para crear un mensaje usando los argumentos pasados como
for(var i = 0; i < agrs.length; i++){
reg = new RegExp(''/{''+i+''/}'', ''gi'');
key = key.replace(reg,agrs[i])
}
El problema es que no puede tomar el parámetro i
para crear la regla exp.
¿Cuál es la manera de lograr esto?
Creo que su segunda línea se supone que es
reg = new RegExp(''/{''+i+''/}'', ''gi'');
pero no sé si ese es su único problema o no.
Le recomiendo encarecidamente que utilice la forma funcional de String.replace() para resolver su problema, en lugar de intentar parametrizar la String.replace() en for-loop que itere sobre {0}, {1}, etc.
En otras palabras, en lugar de buscar ''{0}'' o ''{1}'', simplemente busque ''{([0-9] +)}'' (es decir {} rodeando un número arbitrario, y pase una función a la función replace () para reemplazar inteligentemente estas expresiones en función del número entre {} ''s. Esto le permite usar un literal RegExp que puede escribir como / {([0-9] +)} / en lugar de perder el tiempo con personajes de escape en cuerdas.
Algo como esto:
s=''the song says {0} little {1} little {2} little-endians'';
args=[''zero'',''one'',''two''];
new_string = s.replace(/{([0-9]+)}/g, function(wholematch,firstmatch)
{return args[(+firstmatch)]; }
);
cuyos rendimientos
the song says zero little one little two little-endians
Ver esta pregunta similar .
editar: si quieres dejar solo los elementos que son más grandes que la longitud de tu lista de args
, asegúrate de verificar la cordura del número de parámetro:
s=''the song says {0} little {1} little {2} little-endians,/n''+
'' {3} little {4} little {5} little-endians'';
args=[''zero'',''one'',''two''];
new_string = s.replace(/{([0-9]+)}/g, function(wholematch,firstmatch)
{var i = +firstmatch; return i < args.length ? args[i] : wholematch;}
);
cuyos rendimientos
the song says zero little one little two little-endians,
{3} little {4} little {5} little-endians
Su expresión regular es /{0}/gi
ya que la crea desde una cadena. Y no es una expresión válida. Necesitas escapar {en la expresión regular porque tiene un significado especial en la sintaxis de expresiones regulares, por lo que debería ser:
new RegExp(''//{''+i+''//}'', ''gi'');
que es ///{0//}/gi
. Necesitas escapar del escape //
en la cadena.
function escapeRegExp(str) {
return str.replace(/[-/[/]///{/}/(/)/*/+/?/.///^/$/|]/g, "//$&");
}
var re = new RegExp(escapeRegExp(str));