diff --git a/ua-parser/src/lib.rs b/ua-parser/src/lib.rs index b28a880..34fc2c9 100644 --- a/ua-parser/src/lib.rs +++ b/ua-parser/src/lib.rs @@ -664,7 +664,7 @@ fn rewrite_regex(re: &str) -> std::borrow::Cow<'_, str> { inclass += 1; } ']' if !escape => { - inclass += 1; + inclass -= 1; } // no need for special cases because regex allows nesting // character classes, whereas js or python don't \o/ @@ -721,6 +721,18 @@ mod test_rewrite_regex { assert_eq!(rewrite(".{1,300}x"), ".+x"); } + #[test] + fn rewrite_all_repetitions() { + assert_eq!( + rewrite("; {0,2}(T-(?:07|[^0][0-9])[^;/]{1,100}?)(?: Build|\\) AppleWebKit)"), + "; {0,2}(T-(?:07|[^0][0-9])[^;/]+?)(?: Build|\\) AppleWebKit)", + ); + assert_eq!( + rewrite("; {0,2}(SH\\-?[0-9][0-9][^;/]{1,100}|SBM[0-9][^;/]{1,100}?)(?: Build|\\) AppleWebKit)"), + "; {0,2}(SH\\-?[0-9][0-9][^;/]+|SBM[0-9][^;/]+?)(?: Build|\\) AppleWebKit)", + ) + } + #[test] fn ignore_non_repetitions() { assert_eq!(