jquery REGEX匹配的确切术语

时间:2014-02-25 19:31:48

标签: jquery regex

我正在使用jQuery和带有自定义分面导航的DataTable。我创建了一个以管道分隔的每个复选框的值列表,以便为dataTable填充fnFilter。取消选中一个框,它会重建没有该值的列表。它的工作正常,除非有“工程”和“机械工程”等值。如果选中“工程”值,但“机械工程”值不是,则“机械工程”不受限制(因为“工程”值符合两者的标准)。我正在尝试使用REGEX修改字符串以将术语限制为字符串。

第一排工程

第二排机械工程

第三排工程,机械工程,电气工程

因此,通过取消选中“工程”,第二行和第三行将保留,但第一行将过滤掉。

我修改了这个以包含更完整的代码。我不知道如何在这里设置演示,但我很乐意这样做。

//dataTable configuration
    $('#directoryTable').dataTable({
                    "sDom": 'lprtpi',
                    "iDisplayLength": 25,
                    "aLengthMenu": [[10, 25, 50, 100, -1], [10, 25, 50, 100, "All"]],
                    "aaSorting": [[0,'asc'],[1,'asc']],
                    "aoColumns": [
                            {"bSortable": true},
                            {"bSortable": true},
                            {"bSortable": false},
                            {"bSortable": false,"sSortDataType": "dom-checkbox" }
                    ]
    })



    //custom filtering on industry clusters     
    var oTable = $('#directoryTable').dataTable();

    $('input[class="cluster"]').click(function(){
        //get list of values of checked boxes in cluster class
        var checkedList = $('input[class="cluster"]:checked').map(function() {return this.value;}).get().join('|');

        //var checkedList = $('input[class="cluster"]:checked').map(function() {return "^"+this.value+",|^"+ this.value+"$|,"+ this.value+"$|,"+ this.value+",";}).get().join('|');
        window.console&&console.log(checkedList);
        //limit results to selected values
        if ($('input[class="cluster"]').is(":checked")) {

            //uses a REGEX filter with a | delimited (OR) filter, only on the third column
            oTable.fnFilter(checkedList, 2, true,false);
            //window.console&&console.log('clicked ' + $(this).val());

        //clear the filter when unchecked
        } else {
          oTable.fnFilter('',2);
          oTable.fnFilter('');
        }
    });

我是jQuery的新手,我真的很感激任何想法。

1 个答案:

答案 0 :(得分:1)

我很抱歉,如果这是基础,但没有你的代码的全部广度,我无法确定我在这里有什么是有效的。我希望它有所帮助。

var reg = /^Engineering$/gi;

var a = ['Mechanical Engineering','engineering','Silver Mining','Engineering','Silver and Gold','Electrical Engineering'];

var items = jQuery(a).filter(function(i,v){
    return reg.test(v);
}).get().join('|');

// items returns engineering|Engineering
// I believe your reg, would just be value of the element that is clicked/unclicked.

所以,如果你想动态传递它,请执行以下操作:

//some function to capture the arg/checkbox value
 var val = arg,
     reg = new RegExp('\^' + val + '\$', "gi");
     reg.test(v); // v being the string passed in for your reiteration.