const regex = /(?(DEFINE)
(?<exprs> (?&expr)(\s+(?&bool)\s+((?&expr)|\(\s*(?&exprs)\s*\)))* )
(?<expr> (?&valleft)\s?(?&comp)\s?(?&valright) )
(?<comp> ((!=)|(==)|(<=)|(>=)|(<)|(>)){1} )
(?<valleft> (?¬)[\w\.]+ )
(?<valright> [\w\.]+ )
(?<bool> (and|or) )
(?<not> (not\s+)?)
)
(?&exprs)/mi;
// Alternative syntax using RegExp constructor
// const regex = new RegExp('(?(DEFINE)
(?<exprs> (?&expr)(\\s+(?&bool)\\s+((?&expr)|\\(\\s*(?&exprs)\\s*\\)))* )
(?<expr> (?&valleft)\\s?(?&comp)\\s?(?&valright) )
(?<comp> ((!=)|(==)|(<=)|(>=)|(<)|(>)){1} )
(?<valleft> (?¬)[\\w\\.]+ )
(?<valright> [\\w\\.]+ )
(?<bool> (and|or) )
(?<not> (not\\s+)?)
)
(?&exprs)', 'mi')
const str = `common.test == 1 or ts==12 and (nlabla<=10 or er==22 or blabl==11 and ere==2 and (bbbb==21 and gg==12) and test==13)`;
// 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