[][src]Crate sublime_fuzzy

Fuzzy matching algorithm based on Sublime Text's string search. Iterates through characters of a search string and calculates a score.

The score is based on several factors:

  • Word starts like the t in some_thing get a bonus (bonus_word_start)
  • Consecutive matches get an accumulative bonus for every consecutive match (bonus_consecutive)
  • Matches that also match case (T -> T instead of t -> T) in case of a case-insensitive search get a bonus (bonus_match_case)
  • The distance between two matches will be multiplied with the penalty_distance penalty and subtracted from the score

The default scoring is configured to give a lot of weight to word starts. So a pattern scc will match SoccerCartoonController, not SoccerCartoonController.

Match Examples

With default weighting.

PatternTarget stringResult
somethingsome search thingsome search thing


Basic usage:

use sublime_fuzzy::best_match;

let result = best_match("something", "some search thing");


Match::continuous_matches returns an iter of consecutive matches. Based on those the input string can be formatted.

format_simple provides a simple formatting that wraps matches in tags:

use sublime_fuzzy::{best_match, format_simple};

let target = "some search thing";

let result = best_match("something", target).unwrap();

    format_simple(&result, target, "<span>", "</span>"),
    "<span>some</span> search <span>thing</span>"

The weighting of the different factors can be adjusted:

use sublime_fuzzy::{FuzzySearch, Scoring};

// Or pick from one of the provided `Scoring::...` methods like `emphasize_word_starts`
let scoring = Scoring {
    bonus_consecutive: 128,
    bonus_word_start: 0,

let result = FuzzySearch::new("something", "some search thing")


Note: Any whitespace in the pattern ('something' in the examples above) will be removed.



Describes a continuous group of char indices


Iterator returning ContinuousMatches from the matched char indices in a Match


Describes a fuzzy search. Alternative to best_match which allows for more configuration.


A (possible partial) match of query within the target string. Matched chars are stored as indices into the target string.


Bonuses/penalties used for scoring a Match.



Returns the best match for query in the target string string.


Formats a Match by appending before before any matches and after after any matches.