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 elxr
Syntax
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 value
a|b
=> match a
or b
a*
=> Zero or more consecutive instances of pattern a
in the list
a+
=> One or more consecutive instances of pattern a
in the list
a{2, 5}
=> Min-Max quantifiers (example matches a
more 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 [TODO]
a,b
=> match a
on current item followed by b
on the next item (sequence)
[name \s\T]
=> match property of object (example matches items with property name
as non-empty string)
> n
| >= n
| < n
| <= n
=> Comparison with literal number [TODO]
/pat/
=> Test string values against regex
"foobar"
=> String literal (example matches the string foobar
)
-2.05
=> Number literal (example matches the number -2.05
)
true
=> Boolean literal (example matches the value true
)
(?<myMatch> \s\T)
=> Named capture group (example matches \s\T
pattern with the name myMatch
) [TODO]
(?: \s\T)
=> Non-capturing group (example checks for \s\T
but doesn't return it as a match) [TODO]
Examples
matchAll
matchAll(/ \n | \s\T /, [null, 23, '', 'wow', false ]
matchAll(/ [seperator true], [id \s\T]+ /, [
{ seperator: true },
{ id: '1' },
{ id: '2' },
{ id: '3' },
{ seperator: true },
{ id: '4' },
{ id: '5' },
{ id: '6' },
])
replaceAll
const replacer = (_, matches) => matches.value.reduce((a, b) => a + b, 0)
replaceAll(/ \n+ /, replacer, [ 'start', 3, 5, 'mid', 2, 0, 4, 'end' ])
License
Elxr is licensed under MIT