$re = '/(<script\b[^><]*>)(.*?)(<\/script>)|\bon\w+\s*=\s*\K(?|(\")([^\"]+)\"|(\')([^\']+)\')/is';
$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>';
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
// Print the entire match result
var_dump($matches);
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 PHP, please visit: http://php.net/manual/en/ref.pcre.php