Skip to content

Instantly share code, notes, and snippets.

@SleepWalker
Forked from padolsey/makeInterpolator.js
Last active August 29, 2015 14:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save SleepWalker/9dabbedd04a00e6583a6 to your computer and use it in GitHub Desktop.
Save SleepWalker/9dabbedd04a00e6583a6 to your computer and use it in GitHub Desktop.
/**
* Outputs a new function with interpolated object property values.
* Use like so:
* var fn = makeInterpolator('some/url/{param1}/{param2}');
* fn({ param1: 123, param2: 456 }); // => 'some/url/123/456'
*/
var makeInterpolator = (function() {
var rc = {
'\n': '\\n', '\"': '\\\"',
'\u2028': '\\u2028', '\u2029': '\\u2029'
};
return function makeInterpolator(str) {
return new Function(
'o',
'return "' + (
str
.replace(/["\n\r\u2028\u2029]/g, function($0) {
return rc[$0];
})
.replace(/\{([\s\S]+?)\}/g, '" + o["$1"] + "')
) + '";'
);
};
}());
var url = makeInterpolator('http://something.com/{param}/{foo}?x={n}');
url({
param: '123',
foo: '456',
n: 789
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment