【问题标题】:regex to find match in patterned data range?正则表达式在模式数据范围内查找匹配?
【发布时间】:2012-01-26 13:35:25
【问题描述】:

我有一个包含 3 列(联系人、部门、电话#)的表格,每个部门单元格将包含大量数据编号,范围如下:(不带引号的确切格式)

“1003、1005-29/36/38/49、4587-99、3301/21、50123、9900-04/10-14/20/30/41-44”

有没有办法在网页中添加过滤器(文本框)以便快速查找?

例如,如果我输入“9912” --> 它将找到字符串:“9900-04/10-14/20/30/41-44”并突出显示它。

注意:我无法控制表格(该列或整个表格没有 id/class),搜索整个网页就可以了,其他地方没有重复信息。

有人能给我指出一个好的方向吗? jQuery?

【问题讨论】:

  • "例如,如果我输入 "9912" --> 它将找到字符串:"9900-04/10-14/ 20/30/41-44" 并突出显示它。"我仍然不明白您是如何尝试查找数据的,您能否更具体地告诉我您要搜索的依据是什么。
  • @D.Bugger 抱歉,20 之前不应该有空格(我更正了)“9900-04/10-14/20/30/41-44”表示:9900,9901,9902, 9903,9904,9910,9911,9912,9913,9914,9920,9930,9941,9942,9943 和 9944。棘手的是我所有的数据都是用这种缩短格式写的(因为它们很多)。但是,用户将始终搜索唯一的扇区号(用户输入中没有正则表达式)
  • 我想如果你想形成一个正则表达式,你可以看看这个在线工具,它非常全面,应该可以工作。gskinner.com/RegExr问候

标签: javascript filter


【解决方案1】:

jQuery 将帮助您与文本框进行交互,但是对于处理字符串和提取数据(即它们匹配的整数),您将需要一些繁重的处理(使用正则表达式、String.indexOf() 和一些循环) .最好在页面加载时完成所有这些处理并将结果缓存在某处,但是根据要处理的字符串数量,这可能会锁定用户界面一段时间,但假设这不是问题然后编写代码有点像这样可以突出显示正确的结果

var dataCache = {};

$(selector to collect all your strings).each(function() {
    var string = $(this).html();
    var matches = yourParserWhichreturnsAnArrayOfIntegers(string);
    for(var i = 0, il = matches.length;i<il;i++) {
        if(dataCache[matches[i]]) {
            dataCache[matches[i]].push(this);    
        } else {
            dataCache[matches[i]] = [this];
        }
    }
});

$(yourtextbox).change(function() {
    $(selector to collect all your strings).removeClass("highlighted");
    var matches = dataCache[$(this).val()];
    if (matches) {
        for(var i=0,il=matches.length;i<il;i++){
            $(matches[i]).addClass("highlighted");
        }
    }
});

【讨论】:

  • 感谢您的解释,所以现在我只需要找到一种方法将我所有的缩短数据解析为唯一数据并将它们存储在一个 int 数组中。哇这对我来说可能很复杂哈哈~
  • 会的。如果可以的话,我的建议是从摆脱“/”语法开始;如果您将自己限制在用“-”表示的整数和范围内,那会容易得多
【解决方案2】:

如果表格每次都出现在 DOM 中的相同位置,那么您仍然可以获取数据。如果是这种情况,我认为您将不得不搜索扩展的数字。用于搜索压缩数字格式的正则表达式可能会非常复杂。不要忘记在页面上保留对原始数据的引用,以便在找到匹配项时突出显示它。

【讨论】:

  • 表与 DOM 位于同一位置是什么意思?抱歉,我对此不是很熟悉。那么如果没有正则表达式,我应该使用什么方法?谢谢
  • DOM 是文档对象模型,是 javascript 用来访问网页元素的工具。例如,如果您的数据表始终是页面中的第三个表,那么它将可以作为 document.getElementsByTagName('table')[2] 访问。但是,如果桌子的位置发生变化,那么您将需要另一种方式来获得它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多