Reputation: 981
I need an javascript function that can do interpolate like the one for prototype js framework. Anyone have an interpolate function that is not depend on prototype? Jquery is welcome. Thanks.
Upvotes: 2
Views: 2422
Reputation: 215
If you don't care about security (eval()
is not a good thing in serious code):
evalfun = function (x) {
return eval(x);
};
String.prototype.interpolate = function (fn) {
return this.replace( /\{([^}]+)\}/g,
function ( dummy, v ) {
return fn( v );
}
);
};
var world = "room"
"hello {world}".interpolate(evalfun);
Upvotes: 0
Reputation: 63646
Depending on your needs, something like this might work:
String.prototype.interpolate = function(valueMap){
return this.replace(/\{([^}]+)\}/g, function(dummy, v){
return valueMap[v];
});
};
Usage:
var params = {
"speed":"slow",
"color":"purple",
"animal":"frog"
};
var template = "The {speed} {color} fox jumps over the lazy {animal}.";
alert(template.interpolate(params));
//alerts:
//"The slow purple fox jumps over the lazy frog."
This will provide basic interpolation for {named}
items wrapped in braces in your string.
Note: this is a basic implementation and shouldn't be used in cases where the string or parameters are not secure (e.g. if you were to build up a SQL statement or something)
Upvotes: 1