I was recently looking over the promisify-node code to see how the author was able to convert basic functions and objects to a promised-based API. I quickly realized that they were reading function signatures to look for common callback argument names like `callback` and `cb`. The strategy seemed odd but probably necessary.
I took a few minutes to pick out the JavaScript function which parsed argument names for a function and here it is:
function getArgs(func) { // First match everything inside the function argument parens. var args = func.toString().match(/functions.*?(([^)]*))/)[1]; // Split the arguments string into an array comma delimited. return args.split(",").map(function(arg) { // Ensure no inline comments are parsed and trim the whitespace. return arg.replace(//*.**//, "").trim(); }).filter(function(arg) { // Ensure no undefineds are added. return arg; }); }
So given the function above and a sample function, here’s how it would work:
function myCustomFn(arg1, arg2,arg3) { } console.log(getArgs(myCustomFn)); // ["arg1", "arg2", "arg3"]
Aren’t regular expressions a beautiful thing? I can’t name many uses for such a function but here it is if you’re looking to do such a thing!
Source: David Walsh