const regex = /(?i)(data)\s+((\w+)(?=(\s*))(?:\4\w+)+)?\s*(\(((.|\n)*?)\);)?/gm;
// Alternative syntax using RegExp constructor
// const regex = new RegExp('(?i)(data)\\s+((\\w+)(?=(\\s*))(?:\\4\\w+)+)?\\s*(\\(((.|\\n)*?)\\);)?', 'gm')
const str = `data foo (drop = DISCOUNT price RENAME = ( PROV_NM1= PROV_NM PROV_ST_NM1 = PROV_ST_NM) where = ( product = 'whizmo' and product < 10 )) bar( drop= DISCOUNT price rename= ( startDate = beginDate ) );
Data Data_asof&YrMon.;
data halfYear( drop= DISCOUNT price
rename= ( startDate = beginDate ) where=(product = 'abc' and price > 10) );
data apply_adj_v2 non_adjusted incorrect_acct;
data apply_adj_v2;
DATA INPDTL1(RENAME=(PROV_NM1=PROV_NM PROV_ST_NM1=PROV_ST_NM));
DATA REIMB_MTHD_CLM2;
`;
// 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