DataTables正则表达式搜索无法按预期完全匹配

时间:2016-02-23 10:36:09

标签: javascript regex datatables

我想在DataTable的一列中搜索确切的值,并仅返回包含该值的行。我已经读过这样做的方法是对特定值进行正则表达式搜索,但是当我尝试这个时,精确的正则表达式搜索不返回任何内容。

例如,在下表中,我想只返回包含id = 0

的行
<table id="searchTable" class="formTable display dataTable" cellspacing="0" style="width: 100%;">
    <thead>
        <tr>
            <th>id</th>
            <th>Position</th>
            <th>Office</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>0</td>
            <td>Accountant</td>
            <td>Tokyo</td>
        </tr>
        <tr>
            <td>1</td>
            <td>Chief Executive Officer (CEO)</td>
            <td>London</td>
        </tr>
        <tr>
            <td>2</td>
            <td>Junior Technical Author</td>
            <td>San Francisco</td>
        </tr>
        <tr>
            <td>10</td>
            <td>Software Engineer</td>
            <td>London</td>
        </tr>
        <tr>
            <td>20</td>
            <td>Software Engineer</td>
            <td>San Francisco</td>
        </tr>
    </tbody>
</table>

加载文档后,我尝试使用搜索API as described here

var table = null;
$(document).ready(function(){
    table = $('#searchTable').DataTable( {
        "sPaginationType": "full_numbers",
        "iDisplayLength": 5
    } );

table.columns(0).search('/0/',true,false).draw();

} );

JS fiddle showing the regex failing

2 个答案:

答案 0 :(得分:3)

诀窍是在搜索的值之前放置起始字符符号'^',在值之后放置字符符号'$'。如果不给这两个符号,正则表达式将始终不返回任何内容。

固定部分:

var table = null;
$(document).ready(function(){
    table = $('#searchTable').DataTable( {
        "sPaginationType": "full_numbers",
        "iDisplayLength": 5
    } );

table.columns(0).search('^0$',true,false).draw();

} );

答案 1 :(得分:1)

以防其他人遇到此问题。在我的情况下,问题与在正则表达式中搜索具有特殊含义的字符串字符有关(例如,即使表中存在数据,“ AC (JLHA2) - GB/T1179-2008”也不会给出任何结果)。

我能够使用$.fn.dataTable.util.escapeRegex()来转义所有特殊字符来解决此问题。

这里是解决方法:

var table = null;
    $(document).ready(function(){
        table = $('#searchTable').DataTable( {
            "sPaginationType": "full_numbers",
            "iDisplayLength": 5
        } );

        // Escape the expression so we can perform a regex match    
        var val = $.fn.dataTable.util.escapeRegex('AC (JLHA2) - GB/T1179-2008');
        table.columns(0).search(val ? '^' + val + '$' ; '', true, false).draw();        
    } );