首页 > 解决方案 > 搜索大量长文本时正则表达式不佳

问题描述

我有一个带有 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 之间)的功能时,这会变得更慢,如下所示:

https://ideib.caib.es/geoserveis/services/public/GOIB_MTIB5m2012_Me/MapServer/WMSServer/?service=wms&request=getcapabilities

我搜索标签“名称”、“标题”、“关键字”和“摘要”内的字段,最后一个似乎是文本较长的字段。

我输入的文本经过一段代码,因此“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;

这整个事情似乎不是最有效的方法,所以有时搜索会冻结应用程序几秒钟。关于如何使这项工作更快的任何想法?

标签: javascriptasp.netregexopenlayers

解决方案


推荐阅读