0.0.3 • Published 4 years ago
elxr v0.0.3
Elxr (List expressions)
Regular expression-like syntax for list operations. An experiment generalizing regex-like operations to a list.
Install
To install the latest stable version of elxr -
yarn add elxr
// OR
npm install --save elxrSyntax
Whitespaces are ignored (except within literals)
\s=> Any string\n=> Any number\b=> Any boolean\o=> Any object (has to be a record) TODO\a=> Any array TODO\T=> Any truthy value\F=> Any falsey valuea|b=> matchaorba*=> Zero or more consecutive instances of patternain the lista+=> One or more consecutive instances of patternain the lista{2, 5}=> Min-Max quantifiers (example matchesamore than 2 times but less than 5)(\s\T)=> Group (example matches any non-empty string)^a$=>^indicates start of list, and$indicates end of list TODOa,b=> matchaon current item followed bybon the next item (sequence)[name \s\T]=> match property of object (example matches items with propertynameas non-empty string)> n|>= n|< n|<= n=> Comparison with literal number TODO/pat/=> Test string values against regex"foobar"=> String literal (example matches the stringfoobar)-2.05=> Number literal (example matches the number-2.05)true=> Boolean literal (example matches the valuetrue)(?<myMatch> \s\T)=> Named capture group (example matches\s\Tpattern with the namemyMatch) TODO(?: \s\T)=> Non-capturing group (example checks for\s\Tbut doesn't return it as a match) TODO
Examples
matchAll
// | Match for any number or any non-empty string or any object with `prop` is true
matchAll(/ \n | \s\T /, [null, 23, '', 'wow', false ]
// > {
// groups: [
// { index: 1, value: 23 }, // \n
// { index: 3, value: 'wow' }, // \s\T
// ]
// }// | Match for property `seperator` true, followed by one or more list of id's that are non-empty strings
matchAll(/ [seperator true], [id \s\T]+ /, [
{ seperator: true },
{ id: '1' },
{ id: '2' },
{ id: '3' },
{ seperator: true },
{ id: '4' },
{ id: '5' },
{ id: '6' },
])
// > {
// groups: [
// {
// index: 0,
// value: [
// [{ value: { seperator: true }, index: 0 }],
// [{ value: [{ id: '1' }, { id: '2' }, { id: '3' }], index: 1 }],
// ],
// },
// {
// index: 4,
// value: [
// [{ value: { seperator: true }, index: 4 }],
// [{ value: [{ id: '4' }, { id: '5' }, { id: '6' }], index: 5 }],
// ],
// },
// ]
// }replaceAll
// | Match for any number or any non-empty string or any object with `prop` is true
const replacer = (_, matches) => matches.value.reduce((a, b) => a + b, 0)
replaceAll(/ \n+ /, replacer, [ 'start', 3, 5, 'mid', 2, 0, 4, 'end' ])
// > [ 'start', 8, 'mid', 6, 'end' ]License
Elxr is licensed under MIT