const regex = /\s+TRN\s+[a-z\d]+\s+\d+\s+(\s+\d+\s+)\w+(\s+\d{2}\w{3}\s+)\d\s([a-z]{5})\s+([a-z]{5})\s[a-z\d]+\s+[\D]+(\d{4}|\d{0})\s+(\d{4}|\d{0})/ig;
// Alternative syntax using RegExp constructor
// const regex = new RegExp('\\s+TRN\\s+[a-z\\d]+\\s+\\d+\\s+(\\s+\\d+\\s+)\\w+(\\s+\\d{2}\\w{3}\\s+)\\d\\s([a-z]{5})\\s+([a-z]{5})\\s[a-z\\d]+\\s+[\\D]+(\\d{4}|\\d{0})\\s+(\\d{4}|\\d{0})', 'ig')
const str = `4 TRN 2C 87 6628 AF 26NOV 4 FRLPD FRPLY HK1 1800 2007
3 TRN 2C 87 5266 BI 16NOV 1 FRBOJ FRMLV HK PAST 3333 3333*
4 TRN 2C 87 5454 BI 19NOV 4 FRMLV FRBOJ HK PAST *
3 TRN 2C 87 5266 BI 16NOV 1 FRBOJ FRMLV HK PAST *
4 TRN 2C 87 5454 BI 19NOV 4 FRMLV FRBOJ HK PAST *
3 TRN 2C 87 6609 AF 23NOV 1 FRPLY FRLPD HK PAST *
4 TRN 2C 87 6628 AF 26NOV 4 FRLPD FRPLY HK1 1800 2007
3 TRN 2C 87 6817 AF 25NOV 3 FRLPD FRBZR HK1 1810 2047
FRLPD/LYON PART DIEU//FRBZR/BEZIERS /TGD *
4 TRN 2C 87 6860 AF 27NOV 5 FRBZR FRLPD HK1 1618 1850
FRBZR/BEZIERS//FRLPD/LYON PART DIEU /TGD *
3 TRN 2C 87 6201 BF 23NOV 1 FRPLY FRVLA HK PAST *
4 TRN 2C 87 6194 BF 24NOV 2 FRVAF FRPLY HK1 0843 1110
FRVAF/VALENCE VILLE//FRPLY/PARIS GARE LYON /TGD *
3 TRN 2C 87 3101 B 24NOV 2 FRPSL FRAEZ HK1 0653 0903
FRPSL/PARIS ST LAZARE//FRAEZ/LE HAVRE /TIB *
4 TRN 2C 87 3130 A 25NOV 3 FRAEZ FRPSL HK1 1757 2010
FRAEZ/LE HAVRE//FRPSL/PARIS ST LAZARE /TIB *
3 TRN 2C 87 6700 BF 26NOV 4 FRAEK FRPLY HK1 0542 0837
FRAEK/MULHOUSE VILLE//FRPLY/PARIS GARE LYON /TGD *
4 TRN 2C 87 9223 BF 27NOV 5 FRPLY FRAEK HK1 1823 2103
FRPLY/PARIS GARE LYON//FRAEK/MULHOUSE VILLE /TGL *
3 TRN 2C 87 5352 BF 26NOV 4 FRLPD FRDJU HK1 0629 0835
FRLPD/LYON PART DIEU//FRDJU/MASSY TGV /TGD *
4 TRN 2C 87 5233 BF 26NOV 4 FRDJU FRRNS HK1 1538 1747
FRDJU/MASSY TGV//FRRNS/RENNES /TGA *
5 TRN 2C 87 5346 BF 27NOV 5 FRRNS FRLPD HK1 1609 2030
FRRNS/RENNES//FRLPD/LYON PART DIEU /TGD *
3 TRN 2C 87 6602 BF 30NOV 1 FRLPD FRPLY HK1 0602 0813
FRLPD/LYON PART DIEU//FRPLY/PARIS GARE LYON /TGD *
4 TRN 2C 87 6629 BF 04DEC 5 FRPLY FRLPD HK1 1857 2057
FRPLY/PARIS GARE LYON//FRLPD/LYON PART DIEU /TGD`;
// Reset `lastIndex` if this regex is defined globally
// regex.lastIndex = 0;
let m;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match}`);
});
}
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for JavaScript, please visit: https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions