const regex = /((?<=[ )()']where)|(?<=[ )()']and)|(?<=[ )()']o[rn])|(?<=[ )()']if)|(?<=[ )()']when)|(?<=having))+(\s|\()+[)(,'+_¥£$#\@\w\[\]\.\s]+like\s*\(?\s*(('((\w|%|'{2})*)')\s*\+)*\s*@p\d+\s*(\+('%'))*\)/gi;
// Alternative syntax using RegExp constructor
// const regex = new RegExp('((?<=[ )()\']where)|(?<=[ )()\']and)|(?<=[ )()\']o[rn])|(?<=[ )()\']if)|(?<=[ )()\']when)|(?<=having))+(\\s|\\()+[)(,\'+_¥£$#\\@\\w\\[\\]\\.\\s]+like\\s*\\(?\\s*((\'((\\w|%|\'{2})*)\')\\s*\\+)*\\s*@p\\d+\\s*(\\+(\'%\'))*\\)', 'gi')
const str = `select * from a where #myTable\$@_¥£.\$@_¥£#columnName like ('%'+@p2+'%')
select * from a where #myTable\$_¥£.\$_¥£#columnName like ('%'+@p2+'%')
(\\w|\\[|\\]|\\.|\\s|'|\\+|\\(|\\)|\\,)
select a from b where h like ('%'+@p2+'%')
having b.d like ('%'+@p2)
)join c on a.b like (@p2+'%')
and a.b like (@p2)
if a like ('%abc24''as'+@p2+'%')
case when a like ('%'+@p2+'%')
where (((a like ('%'+ @p2+'%'))))
where a + 'b' like ('%'+@p2+'%')
where concat(a,b) like ('%'+@p2+'%') or ltrim(a) like ('%'+@p2+'%')
select * from a where concat(a,b) like 'a' and c like d or ltrim(a) like ('%'+@p2+'%')
where isnull(ltrim(a), '0') like ('%'+@p2+'%')
where a + 'b' LIKe ('%'+@p2+'%')
vICM_EVENTlike roadshowev0like_ where upper(roadshowev0like_.EVENT_NAME) like ('%'+@p1+'%') or upper(roadshowev0like_.EVENT_SYMBOLlike) like ('%'+@p2+'%') and e_.EVENT_SYMBOLike like('%'+@p2+'%')
from vICM_INVESTOR investor0_ where (upper(investor0_.OrgId) like ('%'+@p1+'%') or upper(investor0_.Name) like ('%'+@p2+'%')) and investor0_.IsDeactivated=@p3 order by investor0_.Name asc
where ((h.g) + upper(concat(investor0_.OrgId, 'd') + (a.d)) like ('%'+@p1+'%')
or upper(investor0_.Name) like ('%'+@p2+'%')) and investor0_.IsDeactivated=@p3 order by investor0_.Name asc
where (a.b like ('%'+@p2+'%')) and d.g like ('%'+@p2+'%')
(where a.b like ('%'+@p2)
if a like ('%'+@p2)
join a on b.d like ('%'+@p2)
// not supported
where a like 'b' and c like ('%'+@p2+'%')
where a like (' '+@p1+'%')
// supported
where a like ('%'+@p1+'%') and c like ('%'+@p2+'%')
`;
// 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