{"id":13771991,"url":"https://github.com/commenthol/named-regexp-groups","last_synced_at":"2025-04-28T03:32:17.844Z","repository":{"id":15553272,"uuid":"78370581","full_name":"commenthol/named-regexp-groups","owner":"commenthol","description":"Regular expressions with named capture groups and named back-references","archived":false,"fork":false,"pushed_at":"2022-02-25T20:38:04.000Z","size":22,"stargazers_count":10,"open_issues_count":0,"forks_count":2,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-04-12T13:57:05.308Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"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/commenthol.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":"2017-01-08T21:07:56.000Z","updated_at":"2023-11-23T19:33:28.000Z","dependencies_parsed_at":"2022-08-07T08:01:11.698Z","dependency_job_id":null,"html_url":"https://github.com/commenthol/named-regexp-groups","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/commenthol%2Fnamed-regexp-groups","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/commenthol%2Fnamed-regexp-groups/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/commenthol%2Fnamed-regexp-groups/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/commenthol%2Fnamed-regexp-groups/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/commenthol","download_url":"https://codeload.github.com/commenthol/named-regexp-groups/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251246263,"owners_count":21558761,"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":[],"created_at":"2024-08-03T17:00:58.545Z","updated_at":"2025-04-28T03:32:17.291Z","avatar_url":"https://github.com/commenthol.png","language":"JavaScript","funding_links":[],"categories":["Uncategorised"],"sub_categories":[],"readme":"# named-regexp-groups\n\n\u003e Regular expressions with named capture groups and named back-references\n\n[![NPM version](https://badge.fury.io/js/named-regexp-groups.svg)](https://www.npmjs.com/package/named-regexp-groups)\n[![Build Status](https://github.com/commenthol/named-regexp-groups/workflows/CI/badge.svg?branch=master\u0026event=push)](https://github.com/commenthol/named-regexp-groups/actions/workflows/ci.yml?query=branch%3Amaster)\n\nCreate a named capture group with `(?\u003cname\u003e.*)` or `(:\u003cname\u003e.*)` when using\na RegExp. The methods of RegExp are supported excluding compile and toString.\nUse named back-references using `(?\u0026name)` to include already defined named pattern.\n\n* [Installation](#installation)\n* [Usage](#usage)\n  * [exec](#exec)\n  * [test](#test)\n  * [String.replace](#stringreplace)\n  * [String.match](#stringmatch)\n  * [String.split](#stringsplit)\n* [ES7](#es7)\n* [License](#license)\n\n## Installation\n\n    npm install --save named-regexp-groups\n\n## Usage\n\n```js\nimport NamedRegExp from 'named-regexp-groups'\n//or\nconst NamedRegExp = require('named-regexp-groups')\n\n// as string\nvar r = new NamedRegExp('(?\u003cfoo\u003efoo)(?\u003cbar\u003e)(-)(?:wat)(?\u003cna\u003e(?:na)+)(?\u0026na)')\n// or as regex\nvar r = new NamedRegExp(/(:\u003cfoo\u003efoo)(:\u003cbar\u003e)(-)(?:wat)(:\u003cna\u003e(?:na)+)(:\u0026na)/)\n\nr.source\n// =\u003e r.source === '(foo)([^]+)(-)(?:wat)((?:na)+)((?:na)+)'\n```\n\nFor nodejs \u003c v5.0 `core-js` polyfills are required.\nUse `npm i -S core-js` in your project and add:\n\n```js\n// for node \u003c v0.11\nrequire('core-js/es6/object')\n// for node \u003c v5.0\nrequire('core-js/es6/string')\nrequire('core-js/es6/symbol')\n```\n\n### exec\n\n```js\nvar r = new NamedRegExp('(?\u003cfoo\u003efoo)(?\u003cbar\u003ebar)(-)(?:wat)(?\u003cna\u003e(?:na)+)(?\u0026na)')\nr.exec('nanafoobar-watnana')\n// =\u003e [ 'foobar-watnana', 'foo', 'bar', '-', 'na', 'na',\n//  index: 4,\n//  input: 'nanafoobar-watnana',\n//  groups: { foo: 'foo', bar: 'bar', '0': '-', na: 'na', '1': 'na' } ]\n```\n\n### test\n\n```js\nr = new NamedRegExp('(?\u003cfoo\u003efoo)(bar)(?:waah)')\nr.source\n// =\u003e '(foo)(bar)(?:waah)'\nr.test('nanafoobarwaah')\n// =\u003e true\n```\n\n### String.replace\n\nIf using a string as replacement use `$+{name}` to define the placeholder for the capture group.\nThis follows the Syntax of [PCRE Named backreferences][].\n\n```js\nvar r = new NamedRegExp(/(:\u003cyear\u003e\\d+)-(:\u003cmonth\u003e\\d+)-(:\u003cday\u003e\\d+)/)\n\n// ---- using strings\n'2017-01-02'.replace(r, 'day: $+{day}, month: $+{month}, year: $+{year}')\n// =\u003e 'day: 02, month: 01, year: 2017')\n\n// ---- using function\n'2016-11-22'.replace(r, function () { // take care of NOT using an arrow function here!\n  var args = [].slice.call(arguments)\n  var g = this.groups\n  return `day: ${args[g.day]}, month: ${args[g.month]}, year: ${args[g.year]}`\n})\n// =\u003e 'day: 22, month: 11, year: 2017')\n```\n\n### String.match\n\n```js\nr = new NamedRegExp('(?\u003cfoo\u003efoo)(bar)(?:waah)')\n'nanafoobarwaah'.match(r)\n// =\u003e [ 'foobarwaah', 'foo', 'bar',\n//      index: 4, input: 'nanafoobarwaah',\n//      groups: { '0': 'bar', foo: 'foo' } ]\n```\n\n### String.split\n\n```js\nr = new NamedRegExp('(?\u003cfoo\u003efoo)')\n'nanafoobarwaah'.split(r)\n// =\u003e [ 'nana', 'foo', 'barwaah' ]\n```\n\n## ES7\n\nThe proposed [TC39 proposal-regexp-named-groups](https://github.com/tc39/proposal-regexp-named-groups) is finding it's way into the standard.\nChrome\u003e=64 already supports named groups. Maybe node\u003e=10 soon as well...\n\nPaste this into Chrome\u003e=64\n\n```js\nr = new RegExp(/(?\u003cfoo\u003efoo)(?\u003cbar\u003ebar)(-)(?:wat)(?\u003cna\u003e(?:na)+)/);\no = r.exec('nanafoobar-watnana')\n//\u003e (5) [\"foobar-watnana\", \"foo\", \"bar\", \"-\", \"na\",\n//\u003e  index: 4, input: \"nanafoobar-watnana\",\n//\u003e  groups: {foo: \"foo\", bar: \"bar\", na: \"nana\"}]\n```\n\n## License\n\nSoftware is released under [MIT][license].\n\n[license]: ./LICENSE\n[PCRE Named backreferences]: http://perldoc.perl.org/perlretut.html#Named-backreferences\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcommenthol%2Fnamed-regexp-groups","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcommenthol%2Fnamed-regexp-groups","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcommenthol%2Fnamed-regexp-groups/lists"}