package main
import (
"regexp"
"fmt"
)
func main() {
var re = regexp.MustCompile(`(?is)(<script\b[^><]*>)(.*?)(<\/script>)|\bon\w+\s*=\s*\K(?|(\")([^\"]+)\"|(')([^']+)')`)
var 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>`
for i, match := range re.FindAllString(str, -1) {
fmt.Println(match, "found at index", i)
}
}
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 Golang, please visit: https://golang.org/pkg/regexp/