2010-12-01 6 views
1

Je veux faire des remplacements comme ceci:JavaScript: référence retour « dynamique » RegExp remplacement

var txt = "Some text containing $_variable1 and with $_variable2 inside of it as well."; 
var rx = /(\$_[a-z]+)/g 

var $_variable1 = "A CAT"; 
var $_variable2 = "A HOTDOG"; 

var replaced_txt = txt.replace(rx, $1); 

Je veux replaced_txt à l'égalité « ... contenant un CAT et avec ins ... Hotdog », mais la seule façon d'y parvenir que je l'ai trouvé à ce jour est le suivant:

var replaced_txt = txt.replace(rx, function($1){return eval($1)}); 

Et je le sentiment que ce n'est pas la solution la plus élégante, non?

De préférence, je voudrais éviter eval()

Je suis reconnaissant pour toutes les idées sur ce point!

/C

Répondre

1

Vous pouvez faire ceci:

var values = { 
    '$_variable1': 'A CAT', 
    '$_variable2': 'A HOTDOG' 
}; 
var replaced_txt = txt.replace(rx, function(_, varName) { 
    return values[varName] ? values[varName] : '<unknown variable: ' + varName + '>'; 
}); 
+0

Semble droit. Je suis assez sûr que 'values ​​[var] || 'default'' serait plus propre ici, et 'var' n'est peut-être pas le meilleur nom de variable (ça marche?) – Kobi

+0

oh duhh :-) Je vais corriger ça – Pointy

+0

... et oui tu pourrais faire le || chose mais j'essayais d'être clair pour des raisons pédagogiques. – Pointy