javascript - 搜索大量长文本时正则表达式不佳
问题描述
我有一个带有 openlayers 和 JS 的 ASP.NET 应用程序,在 web 地图应用程序内我有一个搜索框,我输入的文本被修改以匹配不同的字符(例如,字符 'i' 可以是 'i'、'í' 或 '一世')。我还需要找到可能不完整和分开的不同单词,所以如果我搜索“graf de orca cio”,结果应该出现下面的文本:
"Base topo gràf ica de l'illa de Men orca , realitzada a partir de l'actualitza ció "
当我搜索数百(100 到 200 之间)的功能时,这会变得更慢,如下所示:
我搜索标签“名称”、“标题”、“关键字”和“摘要”内的字段,最后一个似乎是文本较长的字段。
我输入的文本经过一段代码,因此“graf de orca cio”变为“.*?(gr(a|á|à)f).*?(d(e|é|è)).*?( (o|ó|ò)rc(a|á|à)).*?(c(i|í)(o|ó|ò)).*?" 那就是用于搜索的正则表达式。我用来进行转换的代码是这样的:
this.patternFn = function (t) {
t = t.replace(/[^a-z\dáàéèíóòúüñ]/gi, '\\' + '$&');
t = t.replace(/(a|á|à)/gi, "(a|á|à)");
t = t.replace(/(e|é|è)/gi, "(e|é|è)");
t = t.replace(/(i|í)/gi, "(i|í)");
t = t.replace(/(o|ó|ò)/gi, "(o|ó|ò)");
t = t.replace(/(u|ú|ü)/gi, "(u|ú|ü)");
t = t.replace(/n/gi, "(n|ñ)");
t = ".*?(" + t + ").*?";
t = t.replace(/\\ /gi, ").*?(");
return t;
这整个事情似乎不是最有效的方法,所以有时搜索会冻结应用程序几秒钟。关于如何使这项工作更快的任何想法?
解决方案
推荐阅读
- json - 避免 Ruby JSON.pretty_generate 中的额外行
- html - 通过悬停其兄弟元素来更改元素显示属性
- javascript - ReactJs 将值传递给另一个 js 文件中的函数
- sql - 当 GROUP BY 应用于 SQL 中的多个列时如何执行 Pivot
- c# - 实体:共同财产 - 寻找所有学生都参加的运动
- python - 蟒蛇硒。如何获取chrome模式手机的文字
- c# - Canvas LayoutTransform 获取实际比例
- rest - 使用 put 在一个 http 请求中更新多个产品的问题
- sql - 将每个列值转换为列名
- sql - 如何使用 !在提到的查询中?