36 lines
679 B
TypeScript

import { diff } from 'diff-match-patch-es';
function matchTextScore(text: string, pattern: string) {
const result = diff(text, pattern);
if (!result.length) {
return 0;
}
return result.reduce((pre, cur) => {
const [matchIndex, matchText] = cur;
if (matchIndex === 0) {
return pre + matchText.length;
}
return pre;
}, 0);
}
export function findMostMatchText(list: string[], pattern: string) {
let maxScore = 0;
let result = '';
for (const text of list) {
const score = matchTextScore(text, pattern);
if (score > maxScore) {
maxScore = score;
result = text;
}
}
return result !== '' ? result : null;
}