数据表正则表达式搜索无法按预期工作以实现完全匹配

DataTables regex search not working as expected for exact match

本文关键字:实现 工作 搜索 正则表达式 数据表      更新时间:2023-09-26

我想在我的 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。

var table = null;
$(document).ready(function(){
    table = $('#searchTable').DataTable( {
        "sPaginationType": "full_numbers",
        "iDisplayLength": 5
    } );
table.columns(0).search('/0/',true,false).draw();
} );

JS小提琴显示正则表达式失败

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

固定部分:

var table = null;
$(document).ready(function(){
    table = $('#searchTable').DataTable( {
        "sPaginationType": "full_numbers",
        "iDisplayLength": 5
    } );
table.columns(0).search('^0$',true,false).draw();
} );

以防其他人面临此问题。就我而言,问题与搜索在正则表达式中具有特殊含义的字符串字符有关(例如。"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();        
    } );