diff --git a/README.md b/README.md index caa3eee..68b3289 100644 --- a/README.md +++ b/README.md @@ -19,13 +19,14 @@ 支持的具体功能如下: -- 针对任意文本(无论是否有分隔符),对照单个或多个名单查找缺失的名字,并可同时查看此时正在使用的全名单 +- 针对任意文本(无论名字间是否有分隔符),对照单个或多个名单查找缺失的名字,并可同时查看此时正在使用的全名单 - 可以直接在插件内输入文本 - - 👍可以选中任意文本(甚至excel表格),然后通过utools快捷面板一键呼出“查找漏网之鱼” + - 🌟 可以选中任意文本(甚至excel表格),然后通过utools快捷面板一键呼出“查找漏网之鱼” + - *注:如果“张三”和“张三丰”同时存在,会首先匹配更长的“张三丰”;如果查询字符串有歧义,例如“张三丰子恺”,可以手动在名字间添加分隔来消歧* - 支持设置名单,自动从文本中识别连续英文字母和汉字字符构成的名字(空格、逗号等其他字符作为分断) - 可以直接在设置输入框内键入文本 - 可以上传文件 - - 👍可以选中任意文本(甚至excel表格),然后通过utools快捷面板一键呼出“新建名单” + - 🌟 可以选中任意文本(甚至excel表格),然后通过utools快捷面板一键呼出“新建名单” @@ -58,12 +59,16 @@ 1. 首先确保已安装[uTools](https://u.tools/)。uTools是一个跨Windows、macOS和Linux的效率工具平台,本插件基于uTools的快捷入口(如超级面板)实现一键光速获取结果的效果,打造极为高效的桌面工具。 2. 安装好uTools之后,有两种安装本插件的方式: - - **推荐**:在官方插件应用市场搜索“漏网之鱼”并安装,方便后续更新 - - 从本仓库的[release界面](https://github.com/atomiechen/CatchFishIfYouCan/releases)下载插件文件,并通过utools超级面板或选中文件呼出utools来安装插件 + - **推荐**:在官方插件应用市场搜索“漏网之鱼”并安装(见下图),方便后续更新 + - 从本仓库的[release页面](https://github.com/atomiechen/CatchFishIfYouCan/releases)下载插件文件,并通过utools超级面板或选中文件呼出utools来安装插件 + +
+ +

-## Contributor +## Contributors Atomie CHEN:atomic_cwh@163.com diff --git a/img/market_marked.png b/img/market_marked.png new file mode 100644 index 0000000..074437c Binary files /dev/null and b/img/market_marked.png differ diff --git a/src/find.js b/src/find.js index 600230e..00a44d3 100644 --- a/src/find.js +++ b/src/find.js @@ -48,7 +48,7 @@ function stringToNames(namesString) { .filter(v => v) // remove duplicate names .forEach(allNames.add, allNames); - return Array.from(allNames); + return Array.from(allNames).sort((a, b) => (a.length - b.length) || a.localeCompare(b)); } utools.onPluginEnter(({code, type, payload}) => { @@ -196,11 +196,19 @@ function removeNameList() { function findFish(namesString, allNames) { namesString = namesString.trim(); const fish = []; - allNames.forEach(v => { - if (!namesString.includes(v)) { - fish.push(v); - } - }) + // reversely loop to check the longer string first + // than the shorter one that may be the prefix + let i = allNames.length - 1; + for (; i >= 0; i--) { + let target = allNames[i]; + if (!namesString.includes(target)) { + fish.push(target); + } else { + // replace all occurences of target word + let re = new RegExp(target, 'g'); + namesString = namesString.replace(re,'|'); + } + } return fish; }