搜索完全匹配并突出显示jquery数据表正则表达式

在jquery数据表中,我必须使用完全匹配过滤结果并突出显示它。 为了完全匹配我正在尝试下面的代码,但它不起作用。 小提琴

table.aoPreSearchCols[ iCol ].sSearch = "^\\s*"+'1'+"\\s*$"; table.aoPreSearchCols[ iCol ].bRegex = false; table.aoPreSearchCols[ iCol ].bSmart= false; 

我认为你需要使用单词边界 , \b

匹配单词边界。 单词边界匹配单词字符未被跟随或前面跟另一个单词字符的位置。

因此,当您有搜索词“ 限制 ”和字符串“ 我的词没有限制 ”,“ 它是无限制的 ”时,只有第一个字符串是匹配。 所以

 $('#search-inp').keyup(function(){ var term = $(this).val(), regex = '\\b' + term + '\\b'; table.columns(1).search(regex, true, false).draw(); }) 

突出

定义一些静态“高亮标记”以注入和删除以突出显示搜索匹配:

 var hlBegin = '', hlEnd = ''; 

将高亮标记添加到列内容:

 function highlight(term) { var row, str, rowCount = table.rows().nodes().length, regexp = new RegExp('('+term+')', 'ig'); for (row=0; row 

删除高亮标记:

 function removeHighlight() { var row, str, rowCount = table.rows().nodes().length; for (row=0; row]+)>)/ig, ''); table.cell(row, 1).data(str).draw(); } } 

将它们放在一起:

 $('#search-inp').keyup(function(){ var term = $(this).val(), regex = '\\b' + term + '\\b'; removeHighlight(); table.columns(1).search(regex, true, false); highlight(term); }) 

分叉小提琴 - > http://jsfiddle.net/Lnvbnp6c/


更新 。 我得到的印象(通过评论)应该匹配任何地方的整个单词。 如果它是关于匹配列开头的整个单词:

 regex = '^' + term + '\\b'; 

http://jsfiddle.net/Lnvbnp6c/1/

如果它只是匹配列开头的字符,而不是nessecarily整个单词:

 regex = '^' + term; 

http://jsfiddle.net/Lnvbnp6c/2/

当他们在搜索字段中输入时,最后一个可能是用户最想要的。


作为替代方法,您可以尝试使用自定义filter:

 $('#search-inp').keyup(function() { var str, term = $(this).val(), regexp = new RegExp('\\b' + term + '\\b', 'ig'); removeHighlight(); $.fn.dataTable.ext.search.push( function(settings, data, dataIndex ) { str = data[1]; return regexp.test(str) ? true : false; } ); table.draw(); highlight(term); $.fn.dataTable.ext.search.pop(); }) 

以上突出显示的演示 - > http://jsfiddle.net/x96hzok4/

我的印象是,这有点快。 当然,如果你有很多行,并且想要搜索多个列,我认为你应该考虑自定义filter,并考虑不要在所有字符串上制作耗时的完整正则表达式。

尝试

 $('#search-inp').keyup(function(){ var key = $(this).val(); var regExp = "." if (key) regExp = "^\\s*" + key + "\\s*$"; table.columns(1).search(regExp, true).draw(); }); 

当搜索key为空时,始终将其设置为. 匹配regex中的any

尝试

  $('#search-inp').keyup(function(){ var elem = $(this) table.columns(1) .search("^\\s*"+elem.val()+"\\s*$", true) .draw() }); 

jsfiddle http://jsfiddle.net/yg32o2yh/6/

见列()。search() ; 另见$ .fn.dataTable.util.escapeRegex()