Como estamos reinventando a roda em algo que seria um recurso adorável em javascript.
Eu uso eval()
, o que não é seguro, mas o javascript não é seguro. Eu admito prontamente que não sou excelente com javascript, mas tinha uma necessidade e precisava de uma resposta, então fiz uma.
Eu escolhi estilizar minhas variáveis com um @
e não um $
, principalmente porque eu quero usar o recurso de múltiplas linhas de literais sem avaliar até que esteja pronto. Portanto, a sintaxe variável é@{OptionalObject.OptionalObjectN.VARIABLE_NAME}
Como não sou especialista em javascript, gostaria de receber conselhos sobre melhorias, mas ...
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);
}
Uma implementação muito simples segue
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);
}
Na minha implementação real, eu escolho usar @{{variable}}
. Mais um conjunto de chaves. É absurdamente improvável encontrar isso inesperadamente. O regex para isso seria semelhante/\@\{\{(.*?)(?!\@\{\{)\}\}/g
Para facilitar a leitura
\@\{\{ # 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 você não tem experiência com regex, uma regra bastante segura é escapar a todos os caracteres não alfanuméricos e nunca escapar desnecessariamente de letras, pois muitas letras escapadas têm um significado especial para praticamente todos os tipos de regex.