A string variable parser for JavaScript
npm install stringd> NodeJS String Variable Parser
[![NPM Version][npm-image]][npm-url]
[![NPM Downloads][downloads-image]][downloads-url]
Create parsable strings using template formats by argument mapping.
Similar to [printf][printf] but supports nesting and exclusive recursions
[![NPM][npm-image-url]][npm-url]
Via [NPM][npm]:
`` bash`
npm install stringd
` javascript
import stringd from 'stringd';
stringd('Hello :{name}', {name: 'World'});
// Hello World
stringd(':{last}, :{first} :{last}', {last: 'Doe', first: 'John'});
// Doe, John Doe
`
* tmp: <[string][]>props
* : <[object][]>ignore
* : <[string][][]>
* Returns: <[string][]>
Parse the tmp string, replacing variable sections with flexibly defined values within the props objectignore
String tags within the array are skipped in the process. (used specifically to avoid repetition/recursion)
Whichever is more comfortable for you would work just fine
` javascript`
stringd('Hello :{name}', {name: 'World'}); // Hello World
stringd('Hello %{name}', {name: 'World'}); // Hello World
stringd('Hello ${name}', {name: 'World'}); // Hello World
stringd('Hello :{name%}', {name: 'World'}); // Hello World
stringd('Hello %{name%}', {name: 'World'}); // Hello World
stringd('Hello ${name%}', {name: 'World'}); // Hello World
` javascript`
assert.equal('John Davis', stringd(':{name}', {
name: ':{first} :{last}',
last: 'Davis',
first: 'John',
}));
` javascript`
assert.equal(
'Age Difference = [32 + 25] = [57]',
stringd(
stringd('Age Difference = [:{age1} + :{age2}] = [:{add(:{age1}, :{age2})}]', {
age1: 32,
age2: 25,
}),
{add: (_, data) => data.args.reduce((a, v) => a + +v.trim(), 0)},
),
);
` javascriptHello, ${name.trim()}
assert.equal(
'Hello, Guys; Hello, World. How are you doing?',
stringd(':{greet(Guys, post=How are you doing?, World)}', {
greet: (_, names) =>
names.args
.map(name => )`
.join('; ')
.concat('. ', names.matched.post),
}),
);
` javascript:{greeting}, you have contributed $:{cash} in the span of :{duration}
assert.equal(
'Hello John Davis, you have contributed $585 in the span of 13 months',
stringd(':{name:parsed}', {
name: ':{first} :{last}',
last: 'Davis',
first: 'John',
greeting: 'Hello :{name}',
months: 13,
duration: ':{months} months',
contribution: 45,
// Functions get the entire template object as an argument
// so you can do advanced processing
cash: ({contribution, months}) => contribution * months,
'name:parsed': ,`
})
);
` javascript`
assert.equal(' 10', stringd(':5{val}', {val: 10}));
` javascript`
assert.equal('10 ', stringd(':-5{val}', {val: 10}));
` javascript`
assert.equal('00010', stringd(':05{val}', {val: 10}));
` javascript`
assert.equal('10000', stringd(':-05{val}', {val: 10}));
Recursive nesting is unparsed at the second level, otherwise, it continues until its done parsing the entire string
` javascript`
assert.equal(
'James:{name} :{name} :{data} :{data} :{all} :{name} :{data}Jack James:{data}Jack James:{data}Jack :{misc} :{data} :{all} James:{data}Jack :{misc}',
stringd(':{name} :{misc}', {
name: ':{first}:{data}:{last}',
first: 'James',
last: 'Jack',
misc: ':{data}',
data: ':{name} :{all}',
all: ':{name} :{misc} :{data} :{all} :{name} :{misc}',
})
);
` javascript`
assert.equal(' 2364', stringd(stringd('::{pad}{price}', {pad: 10}), {price: 2364}))
stringd replaces keys in order precedence. Keys that appear first are replaced first
` javascript
stringd( // str key appears first
stringd(':{tro:{str}}', {str: 'y', 'tro:{str}': ':{tron}'}),
{ tron: 'Movie', troy: 'Dude' }
); // Dude
stringd( // str key appears later
stringd(':{tro:{str}}', {'tro:{str}': ':{tron}', str: 'y'}),
{ tron: 'Movie', troy: 'Dude' }
); // Movie
`
Feel free to clone, use in adherance to the license. Pull requests are very much welcome.
` bash`
git clone https://github.com/miraclx/stringd.git
cd stringd
npm installhack on code
npm test
Tests are executed with [Jest][jest]. To use it, simple run npm install, it will installnode_modules
Jest and its dependencies in your project's directory and finally npm test.
To run the tests:
`bash``
npm install
npm test
[Apache 2.0][license] © Miraculous Owonubi ([@miraclx][author-url]) <omiraculous@gmail.com>
[npm]: https://github.com/npm/cli "The Node Package Manager"
[jest]: https://github.com/facebook/jest "Delightful JavaScript Testing"
[printf]: https://github.com/adaltas/node-printf
[license]: LICENSE "Apache 2.0 License"
[author-url]: https://github.com/miraclx
[npm-url]: https://npmjs.org/package/stringd
[npm-image]: https://badgen.net/npm/node/stringd
[npm-image-url]: https://nodei.co/npm/stringd.png?stars&downloads
[downloads-url]: https://npmjs.org/package/stringd
[downloads-image]: https://badgen.net/npm/dm/stringd
[string]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type
[object]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object