2010-12-01 23 views
1

我要讓替換這樣的:JavaScript的:「動態」後向引用正則表達式替換

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); 

我想replaced_txt平等「......含有A CAT與熱狗插件...」,但實現這一目標的唯一途徑,我已經發現迄今是這樣的:

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

我有一種感覺,這是不是最優雅的解決方案,不是嗎?

最好我想避免eval()

我有這方面的想法感謝!

/C

回答

1

你可以這樣做:

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

似乎是正確的。我很確定`values [var] || 'default'會在這裏更加整潔,`var`可能不是最好的變量名稱(它是否工作?) – Kobi 2010-12-01 17:50:46