const regex = /(<script\b[^><]*>)(.*?)(<\/script>)|\bon\w+\s*=\s*\K(?|(\")([^\"]+)\"|(')([^']+)')/isg;
// Alternative syntax using RegExp constructor
// const regex = new RegExp('(<script\\b[^><]*>)(.*?)(<\\\/script>)|\\bon\\w+\\s*=\\s*\\K(?|(\\")([^\\"]+)\\"|(\')([^\']+)\')', 'isg')
const str = `<div id='content' onClick='abc()'>Lorem On='abc' ipsum on to</div>
<input id='a' type='range'>
<input id='b' type='range'>
<script>abc();</script>
Jan23: The following is an addition set of tests including escaping quotes and .replace(/'/ situations that can cause problems.
<div id='content'
onClick='yyy("ere\\'xyz\\'").value=\\'ewew\\'; yyy("jhrhej")'
>Lorem On='abc' ipsum on to</div>
<input id='a' type='range'
onPress="xxx(document.getElementById(\\"abc\\"))"
onSomething="yyy(\\'fehrje\\')"
onSomethingElse="document.getElementById('content').innerHTML.replace(/"/g, \\"dq\\")">
<input id='b' type='range'>
<script>
function abc() {console.log('abc()');};
function xxx(elem) {console.log('xxx:'+elem.className);};
function yyy(str) {console.log('yyy:'+str);};
yyy("ere\\'xyz\\'");
yyy("jhrhej");
var aaa=document.getElementById('content').innerHTML;
var bbb=document.getElementById('content').innerHTML;
abc();
aaa.replace(/'/g, "single-quotes");
bbb.replace(/'/g, 'single-quotes');
aaa.replace(/"/g, "quotes");
bbb.replace(/"/g, 'quotes');
</script>
</body>
</html>`;
// 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