fuzzbunny - это небольшая (1K), Fast & Memory Effice Fuzzy String Searching/Satching/Matching Library. Он одинаково хорошо работает в среде браузера или в узле.js.
Другими подобными библиотеками являются Fuzzymatch, Fuzzy, Fuzzy-Search, Fuzzyjs.
fuzzbunny стремится быть ловким и быстрым. Он имеет простой API, который можно легко интегрировать с любой библиотекой Frontend для создания отличного поискового интерфейса. Мы используем его на MixPanel.com для питания нашего раскрывающихся времени и таблиц пользовательского интерфейса.
npm install --save fuzzbunny или yarn add fuzzbunny
Fuzzbunny Gutenberg Catalog Demo →

const { fuzzyFilter , fuzzyMatch } = require ( `fuzzbunny` ) ;
// or import {fuzzyFilter, fuzzyMatch} from 'fuzzbunny';
const heroes = [
{
name : `Claire Bennet` ,
ability : `Rapid cellular regeneration` ,
} ,
{
name : `Micah Sanders` ,
ability : `Technopathy` ,
} ,
{
name : `Hiro Nakamura` ,
ability : `Space-time manipulation` ,
} ,
{
name : `Peter Petrelli` ,
ability : `Tactile power mimicry` ,
} ,
] ;
// Use fuzzyFilter to filter an array of items on specific fields and get filtered + score-sorted results with highlights.
const results = fuzzyFilter ( heroes , `stm` , { fields : [ `name` , `ability` ] } ) ;
/*
results = [
{
item: {
name: 'Peter Petrelli',
ability: 'Tactile power mimicry',
},
score: 1786,
highlights: {
ability: ['', 'T', 'actile power ', 'm', 'imicry'],
},
},
{
item: {
name: 'Hiro Nakamura',
ability: 'Space-time manipulation',
},
score: 983,
highlights: {
ability: ['Space-', 't', 'ime ', 'm', 'anipulation'],
},
},
];
*/
// Use fuzzyMatch to match a single string to get score + highlights. Returns null if no match found.
const match = fuzzyMatch ( heroes [ 0 ] . name , `ben` ) ;
/*
match = {
score: 2893,
highlights: ['Claire ', 'Ben', 'net'],
};
*/ fuzzbunny использует алгоритм оценки, который приоритет следующим сигналам. См. Функцию _getMatchScore .
Пример 1:
{Mayfl}ower ранг над The {Mayfl}owerThe {Mayfl}ower -ряды выше Story of the {Mayfl}owerThe {Mayfl}ower выше {May} {fl}owerThe {May} {fl}ower -рейтинги выше This {May} {fl}ower 
Пример 2:
const f = require ( `fuzzbunny` ) ;
f . fuzzyMatch ( `Gobbling pupusas` , `usa` ) ;
// {score: 2700, highlights: ['Gobbling pup', 'usa', 's']}
f . fuzzyMatch ( `United Sheets of Antarctica` , `usa` ) ;
// {score: 2276, highlights: ['', 'U', 'nited ', 'S', 'heets of ', 'A', 'ntarctica']} Gobbling pup{usa}s выигрывает, потому что 3 буквара смежной последовательности дает более высокий балл.
ПРИМЕЧАНИЕ . fuzzbunny Optmices для значимых результатов. Это только подстроение/префикс/сопоставление с аббревиатурой, а не жадное соответствие.
Это потому, что мозг людей отлично подходит для воспоминания о префиксе. Например, слова, которые начинаются с «CA», гораздо проще вспомнить, чем слова, которые содержат буквы «C» и «а» где -то. Легко помнить, что {usa} означает {U}nited {S}tates of {A}merica , а не F{u}ll Java{s}cript Fr{a}mework
fuzzbunny соответствует ~ миллион строк/секунд на современном оборудовании. Протестировано на MacBook Pro 2018 с процессором 2,4 ГГц. См. Тесты/Performance.js
fuzzbunny поставляется с автогенерированными типами типов. Смотрите index.d.ts