如何解决如何使用正则表达式在数据表中搜索完全匹配
我想搜索完全匹配的数据表的特定列数据,但是我的正则表达式无法正常工作。我希望它与单词点单词(即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();
}
} );
} );
}
非常感谢
解决方法
如果要匹配整个字段,请用^
和$
锚定正则表达式以匹配字符串的开头和结尾。
regex = '^' + searchTerm + '$';
您的正则表达式将与字段中的任何单词匹配。
,除了@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();
}
});
});
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。