Javascript 如何将Select2标记与DataTables正则表达式过滤结合起来?

Javascript 如何将Select2标记与DataTables正则表达式过滤结合起来?,javascript,jquery,regex,datatables,jquery-select2,Javascript,Jquery,Regex,Datatables,Jquery Select2,我正在尝试使用正则表达式过滤器过滤通过Select2标记界面输入的关键字/标记的jquery DataTables表,以便我可以根据或代替精确匹配进行过滤 我正在初始化数据表,将分隔符设置为pipe |(regex或),但它仍然在输入的value属性中用逗号分隔标记 jQuery('#programs-table').dataTable({ "sDom": "<'row-fluid'<'span6'l><'span6'f>r>t<

我正在尝试使用正则表达式过滤器过滤通过Select2标记界面输入的关键字/标记的jquery DataTables表,以便我可以根据或代替精确匹配进行过滤

我正在初始化数据表,将分隔符设置为pipe |(regex或),但它仍然在输入的value属性中用逗号分隔标记

jQuery('#programs-table').dataTable({
            "sDom": "<'row-fluid'<'span6'l><'span6'f>r>t<'row-fluid'<'span6'i><'span6'p>>",
            "bPaginate": false,
            "separator": "|"
          });
jQuery("#program-filter-keyword").change( fnFilterGlobal );
在我看来,我有两个选择:

  • 有人知道如何正确设置此选项,以使用select2中的标记作为数据表上的OR筛选器吗

  • 我不熟悉正则表达式-是否有办法将Select2输入的作为标记输入值的内容转换为适当的正则表达式或搜索,包括带有空格/逗号的标记

  • 下面是一个示例的代码笔(JSFIDLE已关闭)


    谢谢。

    到目前为止,我已经找到了一种方法,可以在我测试过的所有用例中使用

    我基本上绕过了Select2传递给隐藏输入字段的值,因为它会弄乱逗号,因为“separator”选项实际上没有更改标记模式的分隔符(它只适用于多选输入)

    以下是过滤功能:

    function fnFilterGlobal () {             
        var tags = [];
        jQuery("#s2id_program-filter-keyword .select2-search-choice div").each(function() { 
            tags.push(jQuery(this).text()); 
        });              
        jQuery('#programs-table').dataTable().fnFilter(
            tags.join("|").replace(/ /g,"\\ "), null, true, false
        );              
    }
    
    我正在通过解析Select2创建的
    列表并从
    内容中提取标签值来构建所选标签的数组

    然后,对于实际的过滤器字符串,我将数组项与OR功能的管道符号连接起来,并将所有空格替换为
    \
    (转义空格)

    最后,我将“smart filter”选项设置为
    false
    -这是关键,否则它将尝试将筛选器字符串转换为一个复杂的正则表达式,我已经将其设置为一个,转义的空格会导致无效的正则表达式错误

    我已经更新了代码笔,因此您可以看到如何使用Select2和DataTables创建多标记或可筛选的表

    function fnFilterGlobal () {             
        var tags = [];
        jQuery("#s2id_program-filter-keyword .select2-search-choice div").each(function() { 
            tags.push(jQuery(this).text()); 
        });              
        jQuery('#programs-table').dataTable().fnFilter(
            tags.join("|").replace(/ /g,"\\ "), null, true, false
        );              
    }