将多个正则表达式应用于 DataTable 列

Posted

技术标签:

【中文标题】将多个正则表达式应用于 DataTable 列【英文标题】:Apply multiple Regular Expressions to a DataTable column 【发布时间】:2021-10-23 12:25:58 【问题描述】:

我有一个数据表,其中有一列包含用逗号分隔的 ID。这与多选下拉列表配对以过滤行。使用正则表达式按单个 Id 过滤时,一切正常。但是现在我需要按多个 ID 进行过滤。我正在为每个选定的 Id 创建多个正则表达式,并将它们连续应用于列。但结果看起来不太对。下面是所有操作所在的多选下拉列表的更改处理程序的代码。感谢您提供任何帮助或建议。

$("#skillsSearch").on("change", function () 
            var val = $("#skillsSearch").val();
            if (!val || val.toString().indexOf(-1) >= 0) 
                table.search('')
                    .columns()
                    .search('')
                    .draw();
                $("#skillsSearch")[0].sumo.unSelectAll();
                return;
            
            @if (ViewBag.AdminView) 
                @if (includeInactive)
                
                    @html.Raw("var columnNdx = 9;");
                 else
                
                    @Html.Raw("var columnNdx = 8;");
                
             else
            
                @Html.Raw("var columnNdx = 5;");
            
            var searchTerms = val.toString().split(',');
            var regexPattern = "";
            for (var i = 0; i < searchTerms.length; i++) 
                regexPattern += '(^,?' + +searchTerms[i] + ',?\\D)|(,?\\D' + +searchTerms[i] + ',?\\D)|(,?\\D' + +searchTerms[i] + ',?$)';
                var tb = table.columns(columnNdx)
                    .search(regexPattern, true, false);
                    
                regexPattern = "";
            
            tb.draw();
            
);

【问题讨论】:

这个问题是否缺少标签?可能是asp.netasp.net-mvc 【参考方案1】:

经过一番搜索,我发现了一篇帖子,有人建议创建我自己的搜索插件...他指向DataTables Site Blog 的博客...这需要一些努力,但它就像我一样工作想要它......下面是我用来实现所需行为的代码,以防其他人登陆这里......

        $("#skillsSearch").on("change", function () 
            table.draw();
        );
        $.fn.dataTable.ext.search.push(function (settings, searchData) 
            var val = $("#skillsSearch").val();
            if (!val) 

                return true;
            
            @if (ViewBag.AdminView) 
                @if (includeInactive)
                
                    @Html.Raw("var columnNdx = 9;");
                 else
                
                    @Html.Raw("var columnNdx = 8;");
                
             else
            
                @Html.Raw("var columnNdx = 5;");
            
            var searchTerms = val.toString().split(',');
            var regexPattern = "";

            for (var i = 0; i < searchTerms.length; i++) 
                regexPattern = '(^,?' + +searchTerms[i] + ',?\\D)|(,?\\D' + +searchTerms[i] + ',?\\D)|(,?\\D' + +searchTerms[i] + ',?$)';

                var match = searchData[columnNdx].match(regexPattern);
                if (!match) return false;
                regexPattern = "";
            
            return true;

        );

【讨论】:

以上是关于将多个正则表达式应用于 DataTable 列的主要内容,如果未能解决你的问题,请参考以下文章

将正则表达式应用于数据框的所有列的 Pythonic 方式

根据相同字符的不同位置将正则表达式应用于熊猫列

在 Pyspark 中按顺序应用多个正则表达式进行文本清理的最快方法

json转datatable(正则表达式的方法)

Python Datatable/Pydatatable:如何通过正则表达式过滤数据表中的行并根据过滤器为新变量赋值

在多列上迭代和应用正则表达式函数/str 计数