Euromind
  • Javascript
    • Javascript

      Dansk evighedskalender

      7. december, 2020

      Javascript

      API til Statistikbanken

      21. september, 2019

      Javascript

      IntersectionObserver

      9. august, 2019

      Javascript

      Navngivne RegEx-grupper i ECMAScript 2018

      29. juli, 2019

      Javascript

      RegEx: Unicode og Look Backward i ECMAScript 2018

      24. juli, 2019

  • CSS/SCSS
    • CSS/SCSS

      Dansk evighedskalender

      7. december, 2020

      CSS/SCSS

      Variable fonte med dansk tegnsæt i open source

      11. august, 2019

      CSS/SCSS

      Progressbar for dokumentposition

      31. juli, 2019

      CSS/SCSS

      Media Query i 2019

      18. juli, 2019

      CSS/SCSS

      Danske Adressers Web API

      17. juli, 2019

  • C#
    • C#

      Authentication for IOS og Android med Firebase i…

      4. oktober, 2019

      C#

      Andersen, Grundvig, Kierkegaard og ML.NET – del 3

      5. september, 2019

      C#

      Hurtig eksport til Excel

      4. september, 2019

      C#

      Andersen, Grundtvig, Kierkegaard og ML.NET – del 2

      2. september, 2019

      C#

      Andersen, Grundvig, Kierkegaard og ML.NET – del 1

      11. august, 2019

  • Javascript
    • Javascript

      Dansk evighedskalender

      7. december, 2020

      Javascript

      API til Statistikbanken

      21. september, 2019

      Javascript

      IntersectionObserver

      9. august, 2019

      Javascript

      Navngivne RegEx-grupper i ECMAScript 2018

      29. juli, 2019

      Javascript

      RegEx: Unicode og Look Backward i ECMAScript 2018

      24. juli, 2019

  • CSS/SCSS
    • CSS/SCSS

      Dansk evighedskalender

      7. december, 2020

      CSS/SCSS

      Variable fonte med dansk tegnsæt i open source

      11. august, 2019

      CSS/SCSS

      Progressbar for dokumentposition

      31. juli, 2019

      CSS/SCSS

      Media Query i 2019

      18. juli, 2019

      CSS/SCSS

      Danske Adressers Web API

      17. juli, 2019

  • C#
    • C#

      Authentication for IOS og Android med Firebase i…

      4. oktober, 2019

      C#

      Andersen, Grundvig, Kierkegaard og ML.NET – del 3

      5. september, 2019

      C#

      Hurtig eksport til Excel

      4. september, 2019

      C#

      Andersen, Grundtvig, Kierkegaard og ML.NET – del 2

      2. september, 2019

      C#

      Andersen, Grundvig, Kierkegaard og ML.NET – del 1

      11. august, 2019

Euromind
JavascriptWebdesign

Navngivne RegEx-grupper i ECMAScript 2018

af Per Lindsø Larsen 29. juli, 2019
skrevet af Per Lindsø Larsen 29. juli, 2019
Navngivne  RegEx-grupper i ECMAScript 2018

Med ECMAScript 2018 og med understøttelse i Chrome fra v. 64, Safari fra v. 11.1 og iOS Safari fra v. 11.3 er det blevet muligt at navngive grupper i RegExp i javascript.

Hidtil har det været muligt at hente værdier fra match-objektet med notationen $1, $2 … eller direkte matchObj[1], matchObj[2] … Hvis et simpelt CPR-mønster f.eks. anvendes, kan det se således ud:

const cprPattern = /([0-9]{2})([0-9]{2})([0-9]{2})-([0-9]{4})/;

const match = "100688-2105".match(cprPattern);
// eller 
// const match = cprPattern.exec("100688-2105");

if (match){
 console.log(match[1]+'-'+match[2]+'-'+match[3]+ " ("+ match[4] + ")"); //10-06-88 (2105)
}

Tibagereference, så udfaldet af en match-gruppe kan bruges senere i regex-mønstretm der søges på, kan ske med notationen \n hvor n er nummeret på match-gruppen

const cprPattern = /^([0-9]{2})([0-9]{2})([0-9]{2})-([0-9]{4}). Født (19|20)\3/;

const match = "100688-2105. Født 1988".match(cprPattern);

if (match){
 console.log(match[1]+'-'+match[2]+'-'+match[3]+ " ("+ match[4] + ")"); //10-06-88 (2105)
}

I string.replace er match-grupperne på tilsvarende vis tilgængelige med dollar-notationen $1, $2…

const cprPattern = /([0-9]{2})([0-9]{2})([0-9]{2})-([0-9]{4})/;

console.log('100658-2105'.replace(
    cprPattern,`$1-$2-$3 ($4)`
));
// 10-06-88 (2105)

Det har altsammen fungeret efter hensigten, men har haft nogle minusser. Dels er koden ikke særlig læsevenlig og dels kan f.eks. senere tilføjelse af gruppe rykke hele nummer-systemet.

Med ECMAScript 2018 er det muligt at navngive gruppe med formlen ?<gruppenavn> Ovenstående eksempel kan efterfølgende se ud som nedenstående. Match-objektet gemmer på et object groups med de tildelte gruppenavne:

const cprPattern = /(?<day>[0-9]{2})(?<month>[0-9]{2})(?<year>[0-9]{2})-(?<number>[0-9]{4})/;

const match = "100688-2105".match(cprPattern);

if (match){
 const day = match.groups.day; 
 const month = match.groups.month;
 const year = match.groups.year; 
 const number = match.groups.number;
 console.log(`${day}-${month}-${year} (${number})`); //10-06-88 (2105)
}

Med lidt dekonstruktion kan det gøres endnu enklere:

const cprPattern = /(?<day>[0-9]{2})(?<month>[0-9]{2})(?<year>[0-9]{2})-(?<number>[0-9]{4})/;
const match = "100688-2105".match(cprPattern);


if (match) 
{
 const {groups: {day, month, year, number}} = match; 
 console.log(`${day}-${month}-${year} (${number})`); //10-06-88 (2105)
}

Tilbage-referencer kan gøres mere læsevenlige med \k<gruppenavn>

const cprPattern = /(?<day>[0-9]{2})(?<month>[0-9]{2})(?<year>[0-9]{2})-(?<number>[0-9]{4}) Født (19|20)\k<year>/;

På samme måde kan gruppenavne anvendes i replace – enten direkte eller med replace-strengen som en funktion:

console.log('100688-2105'.replace(
    cprPattern,`$<day>-$<month>-$<year> ($<number>)`
));
//10-06-88 (2105)    
console.log('100688-2105'.replace(
    cprPattern,
   (...args) => {
        const {day, month, year, number} = args[args.length-1];
        return `${day}-${month}-${year} (${number})`
    }));      
   //10-06-88 (2105)     
    

Navngivning af grupper tilføjer således ikke i sig selv nye muligheder, ud over muligheden for at gøre koden mere logisk og læsevenlig. Men det er jo også noget.

EcmascriptRegEx
0 Kommentarer
2
FacebookTwitterPinterestEmail
forrige post
RegEx: Unicode og Look Backward i ECMAScript 2018
næste post
Progressbar for dokumentposition

Relaterede indlæg

Dansk evighedskalender

7. december, 2020

Headless browser på 10 minutter

25. juli, 2020

API til Statistikbanken

21. september, 2019

Variable fonte med dansk tegnsæt i open source

11. august, 2019

IntersectionObserver

9. august, 2019

RegEx: Unicode og Look Backward i ECMAScript 2018

24. juli, 2019

Media Query i 2019

18. juli, 2019

Danske Adressers Web API

17. juli, 2019

Forbind Visual Studio til IOS devices på 10...

12. juli, 2019

Barebone AMP i Codepen

9. juli, 2019

Efterlad en kommentar Afbryd svar

Gem mit navn, email, og website i denne browser til senere kommentarer.

Seneste indlæg

  • Dansk evighedskalender

    7. december, 2020
  • Automatisk køreafstand i Excel

    17. august, 2020
  • Headless browser på 10 minutter

    25. juli, 2020

Kategorier

  • C#
  • CSS/SCSS
  • Excel
  • HTML
  • Javascript
  • Mobile
  • Webdesign
  • Xamarin

Om mig

Om mig

Per Lindsø Larsen

Freelance fullstack developer bo9sat i Aarhus.

Du kan hyre mig til korterevarende projekter eller konkrete opgaveløsninger.

Pæn rabat til non-profit organisationer og foreninger.

Når jeg ikke koder, deltager jeg løbende i diverse spændende forskningsprojekter om alt andet end kodning.

Keep in touch

Facebook Twitter Email Github

Tags

Adresser AMP AMP Story Android API Billedformater Billedoptimering Brand C# Codepen Cordova CPR Crome DevTools CSS Debug Ecmascript Excel Fonte Gmail Gulp HTML Ikoner IOS Javascript JsFiddle Machine Learning Mail Mediaquery ML.NET Mobile RegEx SCSS SMTP Stylometri Visual Studio Webdesign Xamarin

Nyhedsbrev

Timeld nyhedsbrev for info om nye blog-indlæg, tips m.v.

  • Facebook
  • Twitter
  • Email
  • Github

@2019 - Euromind.com - Code-To-Go. All Right Reserved.
lindsoe@gmail.com - mobil: 42797273


Tilbage til top
Euromind
  • Javascript
    • Javascript

      Dansk evighedskalender

      7. december, 2020

      Javascript

      API til Statistikbanken

      21. september, 2019

      Javascript

      IntersectionObserver

      9. august, 2019

      Javascript

      Navngivne RegEx-grupper i ECMAScript 2018

      29. juli, 2019

      Javascript

      RegEx: Unicode og Look Backward i ECMAScript 2018

      24. juli, 2019

  • CSS/SCSS
    • CSS/SCSS

      Dansk evighedskalender

      7. december, 2020

      CSS/SCSS

      Variable fonte med dansk tegnsæt i open source

      11. august, 2019

      CSS/SCSS

      Progressbar for dokumentposition

      31. juli, 2019

      CSS/SCSS

      Media Query i 2019

      18. juli, 2019

      CSS/SCSS

      Danske Adressers Web API

      17. juli, 2019

  • C#
    • C#

      Authentication for IOS og Android med Firebase i…

      4. oktober, 2019

      C#

      Andersen, Grundvig, Kierkegaard og ML.NET – del 3

      5. september, 2019

      C#

      Hurtig eksport til Excel

      4. september, 2019

      C#

      Andersen, Grundtvig, Kierkegaard og ML.NET – del 2

      2. september, 2019

      C#

      Andersen, Grundvig, Kierkegaard og ML.NET – del 1

      11. august, 2019

Populære indlæg

  • 1

    Stylometri i C# – del 2

    7. juni, 2019
  • 2

    Send email fra Javascript med Gmail API

    21. juni, 2019
  • 3

    Andersen, Grundvig, Kierkegaard og ML.NET – del 1

    11. august, 2019
  • 4

    Gmail, Yahoo og Outlook som SMTP-server

    18. april, 2019
  • 5

    Registrer Gmail API til brug i javascript

    27. juni, 2019
@2019 - Euromind.com - Code-To-Go. All Right Reserved.
lindsoe@gmail.com - mobil: 42797273

Læs ogsåx

API til Statistikbanken

21. september, 2019

GULP møder AMP – del 1

5. juni, 2019

Variable fonte med dansk tegnsæt i open source

11. august, 2019