Ya que estamos reinventando la rueda en algo que sería una característica encantadora en javascript.
Yo uso eval()
, que no es seguro, pero JavaScript no es seguro. Admito que no soy excelente con javascript, pero tenía una necesidad y necesitaba una respuesta, así que hice una.
Elegí estilizar mis variables con un en @
lugar de un $
, particularmente porque quiero usar la función multilínea de literales sin evaluar hasta que esté lista. Entonces la sintaxis variable es@{OptionalObject.OptionalObjectN.VARIABLE_NAME}
No soy un experto en JavaScript, por lo que con gusto tomaría consejos sobre mejoras pero ...
var prsLiteral, prsRegex = /\@\{(.*?)(?!\@\{)\}/g
for(i = 0; i < myResultSet.length; i++) {
prsLiteral = rt.replace(prsRegex,function (match,varname) {
return eval(varname + "[" + i + "]");
// you could instead use return eval(varname) if you're not looping.
})
console.log(prsLiteral);
}
Sigue una implementación muy simple
myResultSet = {totalrecords: 2,
Name: ["Bob", "Stephanie"],
Age: [37,22]};
rt = `My name is @{myResultSet.Name}, and I am @{myResultSet.Age}.`
var prsLiteral, prsRegex = /\@\{(.*?)(?!\@\{)\}/g
for(i = 0; i < myResultSet.totalrecords; i++) {
prsLiteral = rt.replace(prsRegex,function (match,varname) {
return eval(varname + "[" + i + "]");
// you could instead use return eval(varname) if you're not looping.
})
console.log(prsLiteral);
}
En mi implementación real, elijo usar @{{variable}}
. Un juego más de llaves. Absurdamente improbable encontrar eso inesperadamente. La expresión regular para eso se vería así/\@\{\{(.*?)(?!\@\{\{)\}\}/g
Para que sea más fácil de leer
\@\{\{ # opening sequence, @{{ literally.
(.*?) # capturing the variable name
# ^ captures only until it reaches the closing sequence
(?! # negative lookahead, making sure the following
# ^ pattern is not found ahead of the current character
\@\{\{ # same as opening sequence, if you change that, change this
)
\}\} # closing sequence.
Si no tiene experiencia con expresiones regulares, una regla bastante segura es escapar de todos los caracteres no alfanuméricos, y nunca escapar innecesariamente de las letras, ya que muchas letras tienen un significado especial para prácticamente todos los sabores de expresiones regulares.