pub fn search_match_ranges(re: ®ex::Regex, line: &str) -> Vec<(usize, usize)> {
re.find_iter(line).map(|m| (m.start(), m.end())).collect()
}
#[cfg(test)]
mod tests {
use super::search_match_ranges;
#[test]
fn ranges_are_byte_offsets_in_order() {
let re = regex::Regex::new("ab").unwrap();
assert_eq!(search_match_ranges(&re, "ab cd ab"), vec![(0, 2), (6, 8)]);
}
#[test]
fn no_match_is_empty() {
let re = regex::Regex::new("zzz").unwrap();
assert!(search_match_ranges(&re, "ab cd").is_empty());
}
#[test]
fn multibyte_prefix_yields_byte_not_char_offsets() {
let re = regex::Regex::new("x").unwrap();
assert_eq!(search_match_ranges(&re, "éx"), vec![(2, 3)]);
}
}