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.