String formatting that replicates the ES6 template operator but executes at runtime.
npm install es6format
const format = require( "es6format" );
console.log(
format( "Hello, ${0}!", "World" )
);
// output: Hello, World!
format.bindTo( String, 'using' );
console.log(
"Hello, ${0}!".using( "World" )
);
// output: Hello, World!
Usage is straightforward:
format( <template-string>, ...args )
Arguments passed to the function are made available to the template via the following ways:
to reference arugments by order
format( "Hello, ${0}!", "World" );
to reference any fields of arguments
format( "Call me ${name}.", { name : "Ishmael" });
NOTE: in cases where multiple arguments include the same field, the last argument takes precidence. Use fully defined object references to get access to the others. See below
format(
"Don't call me ${name}.",
{ name : "Ishmael" },
{ name : "Bob"}
);
to use arguments within expressions or to access argument fields. Particularly handy to disambiguate fields when multiple arguments have them (e.g. ${arg2.name}
)
format(
"Using ${name} gives you ${arg1.name} not ${arg0.name}",
{ name : "Ishmael" },
{ name : "Bob"}
);
to use the argument in a function
format( "B is letter ${arg0.indexOf('B')} letter", "ABC" );
format( "the sum of ${a} and ${b} is ${a + b}", {a: 2, b: 5} );
format( "Please don't ${arg0.toLowerCase()}", "YELL" );
to reference arugments programatically (e.g. ${args[arg0]})
format( "I am ${args[arg0]}", 1, "right", "wrong" )
to set values for use later in the format string (e.g. ${x=a+3})
format(
"${arg0}^2 is ${x=arg0*arg0}, and squared again is ${x*x}",
3
)
format(
"my favorite mice are ${ args.join(' mouse, ') }",
"Mickey", "Minie", "Mighty"
)
and
format(
"the password is a ${ arg0.substring( arg0.indexOf( '{' ) + 1, arg0.indexOf( '}' ))}",
"hidden{secret}within"
)
and
format(
"x.a is ${ x = { a : arg0 + arg1 }, 'set' } to ${x.a}",
2, 3
)
and even,
format(
"${args.reduce((o,i)=>{if (o<3) return o+i; return i})}",
1,2,3,4,5,6,7
)
es6format makes use of Function(), so it should never be called on format strings that are not known to be safe.