我想搜索完全匹配的数据表的特定列数据,但是我的正则表达式无法正常工作。我希望它与单词点单词即Jhon.smith一起使用,但它也仅与一个单词一起工作,即结果仅在输入“ Jhon”时出现。请您帮我建议,将不胜感激。
initComplete: function () {
// Apply the search
this.api().columns(8).every( function () {
var that = this;
$( 'input', this.footer() ).on( 'keyup change clear', function () {
if ( that.search() !== this.value ) {
var searchTerm = this.value.toLowerCase(),
regex = '\\b' + searchTerm + '\\b';
that
.search( regex, true, false )
.draw();
}
} );
} );
}
非常感谢
除了@Barmar的答案外,您还需要在搜索词中转义正则表达式的特殊字符。例如,在搜索词“ Jhon.smith”中,点字符“。”。是正则表达式中的特殊字符。它需要这样逃脱:“ Jhon \ .smith”才能正常工作。
由于您正在使用数据表,因此可以像下面这样使用它的内置正则表达式转义功能:
var searchTerm = this.value.toLowerCase();
var regex = $.fn.dataTable.util.escapeRegex(searchTerm);
现在应用@Barmar的答案,如果您不希望匹配“ Jhon.smith asdf”之类的字符串,则需要添加此字符串以进行完全匹配:
regex = '^' + regex + '$';
结合两者,您将获得:
var searchTerm = this.value.toLowerCase();
var regex = '^' + $.fn.dataTable.util.escapeRegex(searchTerm) . '$';
您也不需要将searchTerm
变量转换为小写,因为您可以将true
DataTable的search()
函数作为第四个参数传递来执行不区分大小写的搜索。而且由于该参数的值为true
默认值,因此您甚至无需传递该参数,除非您已全局修改了DataTables配置。
因此,您的脚本将变为:
initComplete: function () {
// Apply the search
this.api().columns(8).every( function () {
var that = this;
$( 'input', this.footer() ).on( 'keyup change clear', function () {
if ( that.search() !== this.value ) {
regex = '^' + $.fn.dataTable.util.escapeRegex(this.value) + '$';
that
.search( regex, true, false )
.draw();
}
});
});
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句