// include the latest version of the regex crate in your Cargo.toml
extern crate regex;
use regex::Regex;
fn main() {
let regex = Regex::new(r#"(?i)(<.+?)(?<=\s)on[a-z]+\s*=\s*(?:(['"])(?!\2).+?\2|(?:\S+?\(.*?\)(?=[\s>])))(.*?>)"#).unwrap();
let string = "<meta name=\"keywords\" content=\"keyword1, keyword2, keyword3\">
<a href=\"something\" onclick= \"bad()\">text</a> onclick not in tags
<a href=\"something\" onclick =bad()>text</a>
<a href=\"something\" onclick=bad('test')>text</a>
<a href=\"something\" onclick=bad(\"test\")>text</a>
<a href=\"something\" onclick=\"bad()\" >text</a>
<a href=\"http://mydomain.com/index.php?oninaval=12\" class=\"titi\">text</a>
What if I write john+onelia=love forever?
<a href=\"something\" onclick=\"bad()\">text</a> onclick not in tags
<a href=\"something\" onclick=bad()>text</a>
<a href=\"something\" onclick=\"bad()\" >text</a>
<a href=\"something\" onclick=a++ >text</a>
onclick=\"asd <span class=\"myclass\"> not in tag too.</span>
<!-- onclick=\" --><a href=\"something\" onclick= \"bad()\">text</a>
<textarea><enter onclick=\"dothat()\" text here></textarea>
yoko ono=\"john lennon\"
<img src=\"/images/img1.jpg\" alt=\"onclick=thegood() onclick=thebad() \"/>
<img alt=\"onclick=\" src=/images/theugly.jpg> the most important part of the message <p class=\"disappears\"></p>
<a href=\"\" onmouseover=a=7>button1</a>
<a href=\"something\" onclick=a++>text</a>
<a href=\"something\" onclick=a<<1>text</a>
<a href=\"\" onmouseover=\"alert(a);\">button2</a>";
// result will be an iterator over tuples containing the start and end indices for each match in the string
let result = regex.captures_iter(string);
for mat in result {
println!("{:?}", mat);
}
}
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 Rust, please visit: https://docs.rs/regex/latest/regex/