{"id":21897385,"url":"https://github.com/adriancmiranda/rx4d","last_synced_at":"2025-04-15T17:48:57.733Z","repository":{"id":32400664,"uuid":"132550936","full_name":"adriancmiranda/rx4d","owner":"adriancmiranda","description":"RegExp 4 dummies","archived":false,"fork":false,"pushed_at":"2023-01-06T01:33:30.000Z","size":3426,"stargazers_count":5,"open_issues_count":21,"forks_count":2,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-28T23:11:21.211Z","etag":null,"topics":["match","re","regex","regexp","regular-expression","test"],"latest_commit_sha":null,"homepage":"https://www.npmjs.com/package/rx4d","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/adriancmiranda.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-05-08T03:51:44.000Z","updated_at":"2023-08-24T16:48:44.000Z","dependencies_parsed_at":"2023-01-14T21:06:45.651Z","dependency_job_id":null,"html_url":"https://github.com/adriancmiranda/rx4d","commit_stats":null,"previous_names":[],"tags_count":11,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adriancmiranda%2Frx4d","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adriancmiranda%2Frx4d/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adriancmiranda%2Frx4d/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adriancmiranda%2Frx4d/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/adriancmiranda","download_url":"https://codeload.github.com/adriancmiranda/rx4d/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249125132,"owners_count":21216699,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["match","re","regex","regexp","regular-expression","test"],"created_at":"2024-11-28T14:17:06.836Z","updated_at":"2025-04-15T17:48:57.700Z","avatar_url":"https://github.com/adriancmiranda.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# rx4d\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fadriancmiranda%2Frx4d.svg?type=shield)](https://app.fossa.io/projects/git%2Bgithub.com%2Fadriancmiranda%2Frx4d?ref=badge_shield)\n\n\u003e RegExp 4 dummies\n\n## Usage:\n\u003e [_play with runkit_](https://npm.runkit.com/rx4d)\n\n```js\nconst { match } = require('rx4d');\n\nconst rxPath = match\n\n// [@$0-9a-zA-Z_\\s-.\\/]+\n.charset('@$0-9a-zA-Z_\\\\s-.\\\\/').oneOrMoreTimes\n\n;\n\nconst rxNamedExpression = match\n\n// (import|export)?\n.group(match.value('import').or.value('export')).zeroOrOneTime\n\n// (\\s+)?\n.group(match.whiteSpace.oneOrMoreTimes).zeroOrOneTime\n\n// (\\{)\n.group(match.escape.value('{'))\n\n// (\\s*)\n.group(match.whiteSpace.zeroOrMoreTimes)\n\n// ([$\\\\w\\\\s]*[^\\s])\n.group(match.charset('$\\\\w\\\\s').zeroOrMoreTimes.notCharset(match.whiteSpace))\n\n// (\\s*)\n.group(match.whiteSpace.zeroOrMoreTimes)\n\n// (\\})\n.group(match.escape.value('}'))\n\n// (\\s+)\n.group(match.whiteSpace.oneOrMoreTimes)\n\n// (from)\n.group('from')\n\n// (\\s+)\n.group(match.whiteSpace.oneOrMoreTimes)\n\n// (['\"`])\n.group(match.charset('\\'\"`'))\n\n// ([@$0-9a-zA-Z_\\s-.\\/]+)\n.group(rxPath)\n\n// (['\"`])?\n.group(match.charset('\\'\"`')).zeroOrOneTime\n\n;\n\nconsole.log(rxNamedExpression());\n// ==\u003e (import|export)?(\\s+)?(\\{)(\\s*)([$\\\\w\\\\s]*[^\\s])(\\s*)(\\})(\\s+)(from)(\\s+)(['\"`])([@$0-9a-zA-Z_\\s-.\\/]+)(['\"`])?\n\nconst reNamedExpression = rxNamedExpression.flags('gm')();\nreNamedExpression.exec(\"import { pattern as PATTERN } from './foo/bar';\");\nreNamedExpression.exec(\"export { regexp as REGULAR_EXPRESSION } from './foo/bar'\");\n```\n\n## Compositions:\n\n```js\nbeginningOfInput: '^'\nendOfInput: '$'\nanySingleCharExceptTheNewline: '.'\nanySingleChar: '[\\\\s\\\\S]'\nsomethingExceptTheNewline: '(?:.+)'\nsomething: '(?:[\\\\s\\\\S]+)'\nanythingExceptTheNewline: '(?:.*)'\nanything: '(?:[\\\\s\\\\S]*)'\nzeroOrMoreTimes: '*'\noneOrMoreTimes: '+'\nzeroOrOneTime: '?'\nor: '|'\nescape: '\\\\'\nbackslash: '\\\\'\nbackspace: '[\\\\b]'\nwordBoundary: '\\\\b'\nnonWordBoundary: '\\\\B'\ndigit: '\\\\d'\nnonDigit: '\\\\D'\nformFeed: '\\\\f'\nlineFeed: '\\\\n'\nlineBreak: '\\\\r\\\\n?|\\\\n|\\\\u2028|\\\\u2029'\ncarriageReturn: '\\\\r'\nwhiteSpace: '\\\\s'\nnotWhiteSpace: '\\\\S'\nnonASCIIWhiteSpace: '[\\\\u1680\\\\u180e\\\\u2000-\\\\u200a\\\\u202f\\\\u205f\\\\u3000\\\\ufeff]'\ntab: '\\\\t'\nverticalTab: '\\\\v'\nalphanumeric: '\\\\w'\nalphanumerical: '\\\\w'\nnonWord: '\\\\W'\nnul: '\\\\0'\nnil: '\\\\0'\nlowercase: '[a-z]'\nuppercase: '[A-Z]'\nletter: '[a-zA-Z]'\nnumeric: '[0-9]'\nvarchar: '[a-zA-Z_$][0-9a-zA-Z_$]'\neol: '(?:(?:\\\\n)|(?:\\\\r\\\\n))'\nstartCapture: '('\nendCapture: ')'\nstartGroup: '('\nendGroup: ')'\nstartCharset: '['\nendCharset: ']'\nquote(value)\nvalue(value)\nplus(value)\nunicode(value)\ncontrol(value)\nnotRemember(value)\nthen(value)\nfind(value)\nmaybe(value)\nmaybeOne(value)\nanythingBut(value)\nsomethingBut(value)\nifFollowedBy(value)\nifNotFollowedBy(value)\nnotCharset(value)\ncharset(value)\nany(value)\nanyOf(value)\nsize(value)\natLeast(value)\natMost(value)\ngroup(value)\nrange(min, max)\nrepeat(times)\nreplace(pattern, replacement)\neither(...rest)\nflags(value)\n```\n\n## Create your own rules\n\n```js\nconst { match, rules } = require('rx4d');\n\nconst ifNotFollowedByComment = match.ifNotFollowedBy(match.quote('//').or.quote('/*'))();\n\nconst customRules = {\n  ifNotFollowedByComment,\n  upercaseVowel: '[AEIOUY]',\n  lowercaseVowel: '[aeiouy]',\n  uppercaseConsonant: '[B-DF-HJ-NP-TV-Z]',\n  lowercaseConsonant: '[b-df-hj-np-tv-z]',\n};\n\nconst overrideRules = undefined; // optional object to override compositions\nmodule.exports = rules(customRules, overrideRules);\n```\n\n\u003c!-- helpful links --\u003e\n\n[regexp tool]: http://www.gethifi.com/tools/regex\n[regexhub]: https://projects.lukehaas.me/regexhub/\n[Unicode range RegExp generator]: https://apps.timwhitlock.info/js/regex\n[documentation]: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/regexp\n\n\n## License\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fadriancmiranda%2Frx4d.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fadriancmiranda%2Frx4d?ref=badge_large)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadriancmiranda%2Frx4d","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fadriancmiranda%2Frx4d","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadriancmiranda%2Frx4d/lists"}