-
- ?条漏网之鱼
-
- 张三,李四,王二麻子,以及其他漏网之鱼
-
- diff --git a/README.md b/README.md index 68b3289..268189d 100644 --- a/README.md +++ b/README.md @@ -20,13 +20,14 @@ 支持的具体功能如下: - 针对任意文本(无论名字间是否有分隔符),对照单个或多个名单查找缺失的名字,并可同时查看此时正在使用的全名单 - - 可以直接在插件内输入文本 - - 🌟 可以选中任意文本(甚至excel表格),然后通过utools快捷面板一键呼出“查找漏网之鱼” - - *注:如果“张三”和“张三丰”同时存在,会首先匹配更长的“张三丰”;如果查询字符串有歧义,例如“张三丰子恺”,可以手动在名字间添加分隔来消歧* -- 支持设置名单,自动从文本中识别连续英文字母和汉字字符构成的名字(空格、逗号等其他字符作为分断) - - 可以直接在设置输入框内键入文本 - - 可以上传文件 - - 🌟 可以选中任意文本(甚至excel表格),然后通过utools快捷面板一键呼出“新建名单” + - 🌟 可以选中任意文本(甚至excel表格),然后通过utools快捷面板一键呼出“查找漏网之鱼”;也可以直接在插件文本框内输入搜索文本 + - *注:如果“张三”和“张三丰”同时存在,会首先匹配更长的“张三丰”;如果查询字符串有歧义,例如“张三丰子恺”,可以手动在名字间添加分隔来消歧* + - ✅ 支持单选/多选名单 + - ✅ 支持设置输出名字之间的分隔符,也可自定义分隔符 + - ✅ 支持导出查找结果/全名单到文件 +- 支持设置不同名单,自动从文本中识别连续英文字母和汉字字符构成的名字(空格、逗号等其他字符作为分断) + - 🌟 可以选中任意文本(甚至excel表格),然后通过utools快捷面板一键呼出“新建名单”;也可以直接在设置输入框内键入名单文本,或上传文本文件 + - *注:目前支持上传txt、csv、md、markdown后缀文本文件* @@ -50,7 +51,7 @@ ## DEMO
设置对照名单
- -- -
-设置名单
+ ++ +
+{{ warnNamesMsg }}
+u?J(e,r,s,!0,!1,p):T(t,n,o,r,s,i,l,c,p)},j=(e,t,n,o,r,s,i,l,c)=>{let a=0;const u=t.length;let p=e.length-1,f=u-1;for(;a<=p&&a<=f;){const o=e[a],u=t[a]=c?vs(t[a]):gs(t[a]);if(!rs(o,u))break;m(o,u,n,null,r,s,i,l,c),a++}for(;a<=p&&a<=f;){const o=e[p],a=t[f]=c?vs(t[f]):gs(t[f]);if(!rs(o,a))break;m(o,a,n,null,r,s,i,l,c),p--,f--}if(a>p){if(a<=f){const e=f+1,p=ef)for(;a<=p;)H(e[a],r,s,!0),a++;else{const d=a,h=a,g=new Map;for(a=h;a<=f;a++){const e=t[a]=c?vs(t[a]):gs(t[a]);null!=e.key&&g.set(e.key,a)}let v,_=0;const b=f-h+1;let S=!1,x=0;const C=new Array(b);for(a=0;a=b){H(o,r,s,!0);continue}let u;if(null!=o.key)u=g.get(o.key);else for(v=h;v<=f;v++)if(0===C[v-h]&&rs(o,t[v])){u=v;break}void 0===u?H(o,r,s,!0):(C[u-h]=a+1,u>=x?x=u:S=!0,m(o,t[u],n,null,r,s,i,l,c),_++)}const w=S?function(e){const t=e.slice(),n=[0];let o,r,s,i,l;const c=e.length;for(o=0;o`,zu.children[0].getAttribute("foo")):(zu.innerHTML=e,zu.textContent)},isBuiltInComponent:e=>Fc(e,"Transition")?Du:Fc(e,"TransitionGroup")?Hu:void 0,getNamespace(e,t){let n=t?t.ns:0;if(t&&2===n)if("annotation-xml"===t.tag){if("svg"===e)return 1;t.props.some((e=>6===e.type&&"encoding"===e.name&&null!=e.value&&("text/html"===e.value.content||"application/xhtml+xml"===e.value.content)))&&(n=0)}else/^m(?:[ions]|text)$/.test(t.tag)&&"mglyph"!==e&&"malignmark"!==e&&(n=0);else t&&1===n&&("foreignObject"!==t.tag&&"desc"!==t.tag&&"title"!==t.tag||(n=0));if(0===n){if("svg"===e)return 1;if("math"===e)return 2}return n},getTextMode({tag:e,ns:t}){if(0===t){if("textarea"===e||"title"===e)return 1;if(Ku(e))return 2}return 0}},qu=(e,t)=>{const n=l(e);return Tc(JSON.stringify(n),!1,t,3)};const Ju=e("passive,once,capture"),Yu=e("stop,prevent,self,ctrl,shift,alt,meta,exact,middle"),Zu=e("left,right"),Qu=e("onkeyup,onkeydown,onkeypress",!0),Xu=(e,t)=>Rc(e)&&"onclick"===e.content.toLowerCase()?Tc(t,!0):4!==e.type?Nc(["(",e,`) === "onClick" ? "${t}" : (`,e,")"]):e,ep=(e,t)=>{1!==e.type||0!==e.tagType||"script"!==e.tag&&"style"!==e.tag||t.removeNode()},tp=[e=>{1===e.type&&e.props.forEach(((t,n)=>{6===t.type&&"style"===t.name&&t.value&&(e.props[n]={type:7,name:"bind",arg:Tc("style",!0,t.loc),exp:qu(t.value.content,t.loc),modifiers:[],loc:t.loc})}))}],np={cloak:()=>({props:[]}),html:(e,t,n)=>{const{exp:o,loc:r}=e;return t.children.length&&(t.children.length=0),{props:[kc(Tc("innerHTML",!0,r),o||Tc("",!0))]}},text:(e,t,n)=>{const{exp:o,loc:r}=e;return t.children.length&&(t.children.length=0),{props:[kc(Tc("textContent",!0),o?Fa(o,n)>0?o:Ec(n.helperString(nc),[o],r):Tc("",!0))]}},model:(e,t,n)=>{const o=$u(e,t,n);if(!o.props.length||1===t.tagType)return o;const{tag:r}=t,s=n.isCustomElement(r);if("input"===r||"textarea"===r||"select"===r||s){let e=Vu,i=!1;if("input"===r||s){const n=Wc(t,"type");if(n){if(7===n.type)e=Bu;else if(n.value)switch(n.value.content){case"radio":e=Au;break;case"checkbox":e=Mu;break;case"file":i=!0}}else(function(e){return e.props.some((e=>!(7!==e.type||"bind"!==e.name||e.arg&&4===e.arg.type&&e.arg.isStatic)))})(t)&&(e=Bu)}else"select"===r&&(e=Iu);i||(o.needRuntime=n.helper(e))}return o.props=o.props.filter((e=>!(4===e.key.type&&"modelValue"===e.key.content))),o},on:(e,t,n)=>Cu(e,0,n,(t=>{const{modifiers:o}=e;if(!o.length)return t;let{key:r,value:s}=t.props[0];const{keyModifiers:i,nonKeyModifiers:l,eventOptionModifiers:c}=((e,t,n,o)=>{const r=[],s=[],i=[];for(let l=0;l