Dal momento che stiamo reinventando la ruota su qualcosa che sarebbe una caratteristica adorabile in JavaScript.
Io uso eval()
, che non è sicuro, ma JavaScript non è sicuro. Ammetto prontamente che non sono eccellente con JavaScript, ma avevo un bisogno e avevo bisogno di una risposta, quindi ne ho fatta una.
Ho scelto di stilizzare le mie variabili con un @
anziché con un $
, in particolare perché voglio usare la funzione multilinea dei letterali senza valutare fino a quando non è pronta. Quindi la sintassi variabile è@{OptionalObject.OptionalObjectN.VARIABLE_NAME}
Non sono un esperto di JavaScript, quindi sarei lieto di ricevere consigli sul miglioramento, ma ...
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);
}
Segue un'implementazione molto semplice
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);
}
Nella mia effettiva implementazione, ho scelto di utilizzare @{{variable}}
. Un altro set di parentesi graffe. Assurdamente improbabile che lo incontrino inaspettatamente. La regex per questo sarebbe simile/\@\{\{(.*?)(?!\@\{\{)\}\}/g
Per facilitare la lettura
\@\{\{ # 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.
Se non hai esperienza con regex, una regola abbastanza sicura è quella di sfuggire a tutti i caratteri non alfanumerici e non sfuggire mai inutilmente alle lettere poiché molte lettere sfuggite hanno un significato speciale praticamente per tutti i gusti di regex.