elxr
TypeScript icon, indicating that this package has built-in type declarations

0.0.3 • Public • Published

Elxr (List expressions)

Regular expression-like syntax for list operations. An experiment generalizing regex-like operations to a list.

npm

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

// | 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

Package Sidebar

Install

npm i elxr

Weekly Downloads

0

Version

0.0.3

License

MIT

Unpacked Size

52.6 kB

Total Files

25

Last publish

Collaborators

  • phenax