Get the second match of a regex

Post Reply
bkromer
Member
Posts: 99
Joined: Thu Jul 11, 2019 10:41 am

Get the second match of a regex

Post by bkromer »

Hello everybody,

i extracted the following text from a pdf:

"....

Bitte lassen Sie uns Ihre Auftragsbestätigungen ausschließlich per Fax zukommen.
00010
Position
127429
Material
DS-127429-MX-T40-A3191N 6035521
Bezeichnung
DATASHEET-DE-EN
300
Auftragsmenge
ST
ME
6969,69
Nettopreis
EUR / 1000 ST
Einheit
Ausführung gemäss:
Dokument/Art/Teil/Version 2105542 D10 000 02 FALTANWEISUNG BLATT
Dokument/Art/Teil/Version 2127429 D15 0M1 01 DS-127429-MX-T40-A3191N
Lieferdatum: 19.07.2019
Datenblatt
DS-127429-MX-T40-A3191N 6035521
Ausführung gemäß Zeichnung
Auf folgende Liefertermine verteilte Gesamtmenge:
Menge ME Liefertermin
300 Stück 19.07.2019
00020
Position
160602
Material
SICHERHEITSINFORMATION MGB2 /
MBM / MCM
Bezeichnung
MGB2 / MBM / MCM
2.000
Auftragsmenge
ST
ME
696,69
Nettopreis
EUR / 1000 ST
Einheit
Ausführung gemäss:
Dokument/Art/Teil/Version 2112131 D10 000 03 FALTANWEISUNG
Dokument/Art/Teil/Version 2500232 H10 0M1 01 SICHERHEITSINFORMATIO
2 / 2

..."


In this code i search for the articles listed in the text.

Code: Select all

function jobArrived( s : Switch, job : Job )
{
//READ IN PDF-TEXT 
var pdf =  File.read( job.getPath(), "UTF-8" );

// using search and capture groups
var dokumentennummernRE = /Dokument\/Art\/Teil\/Version\s([\d+]+)\s([\d+\w+]+)\s([\d+\w+]+)\s([\d]+)\s([\w+\s+\.\-\äüö]+)\s/g; //    
dokumentennummernRE.search( pdf );
var dokumentennummern = dokumentennummernRE.cap(1); //capturedTexts[1]

// using match
var dokumentennummernD = pdf.match( /Dokument\/Art\/Teil\/Version\s([\d+]+)\s([\d+\w+]+)\s([\d+\w+]+)\s([\d]+)\s(.+)/g);

job.log(1, "Dokumentennummern with search: "+dokumentennummern);
job.log(1,"Dokumentennummern with match:  "+dokumentennummernD);	
}
I want the lines wich are starting with "Dokument/Art/Teil/Version". With my regex i should get 4 matches. Then i could look for the capture groups.
But in Switch i only get the first match and can not find a way to enter the second third or other matches.

Does anyone have an idea of how to achieve this?

lg
Ben
Benjamin
bkromer
Member
Posts: 99
Joined: Thu Jul 11, 2019 10:41 am

Re: Get the second match of a regex

Post by bkromer »

Well, I have just found a way :lol:

Code: Select all

// ITERATE OVER THE "MATCHES"-ARRAY AND USING "SEARCH" ON EVERY ELEMENT TO GET CAPTURE GROUPS
var dokumentennummernRE = /Dokument\/Art\/Teil\/Version\s([\d+]+)\s([\d+\w+]+)\s([\d+\w+]+)\s([\d]+)\s([\w+\s+\.\-\äüö]+)/g;
var matches = pdf.match( /Dokument\/Art\/Teil\/Version\s([\d+]+)\s([\d+\w+]+)\s([\d+\w+]+)\s([\d]+)\s([\w+\s+\.\-\äüö]+)\n/g);
for (var i=0; i<matches.length; i++ ) { 
	dokumentennummernRE.search( matches[i] );
	
	job.log(1, "Nr: "+dokumentennummernRE.cap(1));
	job.log(1, "Art: "+dokumentennummernRE.cap(2));
	job.log(1, "Teil: "+dokumentennummernRE.cap(3));
	job.log(1, "Version: "+dokumentennummernRE.cap(4));
	job.log(1, "Bezeichnung: "+dokumentennummernRE.cap(5));
}
Benjamin
Post Reply