Puisque nous réinventons la roue sur quelque chose qui serait une fonctionnalité intéressante en javascript.
j'utilise eval()
, ce qui n'est pas sécurisé, mais javascript n'est pas sécurisé. J'avoue volontiers que je ne suis pas excellent avec javascript, mais j'avais un besoin, et j'avais besoin d'une réponse alors j'en ai fait une.
J'ai choisi de styliser mes variables avec un @
plutôt qu'un $
, en particulier parce que je veux utiliser la fonctionnalité multiligne des littéraux sans évaluer jusqu'à ce qu'elle soit prête. La syntaxe variable est donc@{OptionalObject.OptionalObjectN.VARIABLE_NAME}
Je ne suis pas un expert javascript, donc je prendrais volontiers des conseils d'amélioration mais ...
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);
}
Une implémentation très simple suit
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);
}
Dans ma mise en œuvre réelle, je choisis d'utiliser @{{variable}}
. Un autre ensemble d'accolades. Il est peu probable de rencontrer cela de manière inattendue. Le regex pour cela ressemblerait à/\@\{\{(.*?)(?!\@\{\{)\}\}/g
Pour rendre cela plus facile à lire
\@\{\{ # 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 vous n'êtes pas expérimenté avec les regex, une règle assez sûre est d'échapper à tous les caractères non alphanumériques, et de ne jamais échapper inutilement aux lettres, car de nombreuses lettres échappées ont une signification spéciale pour pratiquement toutes les saveurs de regex.