const regex = /\{(#+)([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)((?:\>[a-zA-Z0-9_\x7f-\xff]*)*)\}\s*(\{\1\>empty\}\s*(.*?)\s*\{\1\>empty\})?\s*([^\n]*)\s*(\{\1\>firstrow\}\s*(.*?)\s*\{\1\>firstrow\})?\s*(\{\1\>row\}\s*(.*?)\s*\{\1\>row\})?\s*(\{\1\>lastrow\}\s*(.*?)\s*\{\1\>lastrow\})?\s*(.*?)\s*\{\1\}/s;
// Alternative syntax using RegExp constructor
// const regex = new RegExp('\\{(#+)([a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*)((?:\\>[a-zA-Z0-9_\\x7f-\\xff]*)*)\\}\\s*(\\{\\1\\>empty\\}\\s*(.*?)\\s*\\{\\1\\>empty\\})?\\s*([^\\n]*)\\s*(\\{\\1\\>firstrow\\}\\s*(.*?)\\s*\\{\\1\\>firstrow\\})?\\s*(\\{\\1\\>row\\}\\s*(.*?)\\s*\\{\\1\\>row\\})?\\s*(\\{\\1\\>lastrow\\}\\s*(.*?)\\s*\\{\\1\\>lastrow\\})?\\s*(.*?)\\s*\\{\\1\\}', 's')
const str = `{#var1>var2}
{#>empty}inside empty{#>empty}
before rows
{#>firstrow}inside firstrow{#>firstrow}
{#>row}inside row{#>row}
{#>lastrow}inside lastrow{#>lastrow}
after rows
{#}`;
// Reset `lastIndex` if this regex is defined globally
// regex.lastIndex = 0;
let m;
if ((m = regex.exec(str)) !== null) {
// 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