const regex = /interface\s([\S]+?)\.(\d+)\s+(description\s(?:[^a-zA-Z0-9]?([\S]+)[^a-zA-Z0-9]?))*(?:encapsulation\sdot1q\s(\d+)\s*)*(?:second-dot1q\s(\S+)\s+)*(?:rewrite\singress\stag\s(.+?)\s{2,})*(?:service-policy\sinput\s([\S]+)\s+)*(?:service-policy\soutput\s([\S]+))*.+?(?:\s*!|\s+service\sinstance)/g;
// Alternative syntax using RegExp constructor
// const regex = new RegExp('interface\\s([\\S]+?)\\.(\\d+)\\s+(description\\s(?:[^a-zA-Z0-9]?([\\S]+)[^a-zA-Z0-9]?))*(?:encapsulation\\sdot1q\\s(\\d+)\\s*)*(?:second-dot1q\\s(\\S+)\\s+)*(?:rewrite\\singress\\stag\\s(.+?)\\s{2,})*(?:service-policy\\sinput\\s([\\S]+)\\s+)*(?:service-policy\\soutput\\s([\\S]+))*.+?(?:\\s*!|\\s+service\\sinstance)', 'g')
const str = `interface Loopback9 description RIFERIMENTO LDP/EoMPLS ip address 172.16.116.23 255.255.255.255!
interface Port-channel2 description KdC-TEST_ESPOSITO/CANDIDO_3263 mtu 9206 no ip address logging event link-status load-interval 30 shutdown
service instance 301 ethernet description LINK-to-OLO encapsulation dot1q 269 second-dot1q 301 rewrite ingress tag pop 1 symmetric group 12333 service-policy input BTS_P01_B-96k_B3-0_B5-0_B6-0_IN service-policy output BTS_P01_B-96k_B3-0_B5-0_B6-0_OUT xconnect 172.16.116.249 570435069 encapsulation mpls mtu 9206
service instance 301 ethernet description LINK-to-OLO encapsulation dot1q 269 second-dot1q 301 rewrite ingress tag pop 1 symmetric group 12333 service-policy input BTS_P01_B-96k_B3-0_B5-0_B6-0_IN service-policy output BTS_P01_B-96k_B3-0_B5-0_B6-0_OUT xconnect 172.16.116.249 570435069 encapsulation mpls mtu 9206 !
service instance 4001 ethernet description SI_VLAN-PING encapsulation dot1q 4001 rewrite ingress tag pop 1 symmetric service-policy input PING_LIMIT bridge-domain 4001 !!
interface Port-channel2.302 description "vlan_pseudo_lato_olo" encapsulation dot1q 1327 second-dot1q 1001 rewrite ingress tag pop 1 symmetric service-policy input GBE_remark_in service-policy output GBE_remark_out !
interface Port-channel2.302 description test_subif!`;
// 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