re = /(<script\b[^><]*>)(.*?)(<\/script>)|\bon\w+\s*=\s*\K(?|(\")([^\"]+)\"|(')([^']+)')/i
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>'
# Print the match result
str.scan(re) do |match|
puts match.to_s
end
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 Ruby, please visit: http://ruby-doc.org/core-2.2.0/Regexp.html