const regex = /#(\d+)\s*=\s*([a-zA-Z0-9]+)\s*\((.*\s*\S*)\);/gi;
// Alternative syntax using RegExp constructor
// const regex = new RegExp('#(\\d+)\\s*=\\s*([a-zA-Z0-9]+)\\s*\\((.*\\s*\\S*)\\);', 'gi')
const str = `#1=IFCOWNERHISTORY(#89024,#44585,\$,.NOCHANGE.,\$,\$,\$,1190720890);
#2=IFCSPACE('3YQLb9Ev54MBIbtTd8JFin',#1,'0001',\$,\$,#88513,#78663,'DesignGross_Floor_2',.ELEMENT.,.INTERNAL.,\$);
#3=IFCSLAB('2DGdC704bA7vMD4RPklWqS',#1,'S01','',\$,#28410,#77505,\$,.FLOOR.);
#4=IFCCONNECTIONSURFACEGEOMETRY(#83383,\$);
#5=IFCCONNECTIONSURFACEGEOMETRY(#84374,\$);
#6=IFCGEOMETRICREPRESENTATIONCONTEXT('Plan','Model',3,1.0E-5,#17,#18276);
#7=IFCGEOMETRICREPRESENTATIONCONTEXT('Plan','Design',3,1.0E-5,#17,#18276);
#8=IFCCARTESIANPOINT((0.0,0.0,0.0));
#9=IFCDIRECTION((0.0,0.0,1.0));
#10=IFCDIRECTION((1.0,0.0,0.0));
#11=IFCCARTESIANPOINT((0.0,0.0));
#12=IFCDIRECTION((0.0,1.0,0.0));
#13=IFCMATERIAL('Column A');
#14=IFCEXTRUDEDAREASOLID(#28326,#17,#9,3657.6);
#15=IFCCARTESIANPOINT((0.0,3048.0,0.0));
#16=IFCLOCALPLACEMENT(#4428,#17);
#17=IFCAXIS2PLACEMENT3D(#8,#9,#10);
#18=IFCPROPERTYSINGLEVALUE('IsExterior',\$,IFCBOOLEAN(.T.),\$);
#19=IFCDIRECTION((-1.0,0.0,0.0));
#20=IFCDIRECTION((0.0,-1.0,0.0));
`;
// 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