如何使用正则表达式使用数据表进行多值或列搜索?
How to use regex for multi-value OR column search using DataTables?
我正在使用 https://datatables.net/examples/api/multi_filter.html
连同使用“;”的 vbrouchet 评论输入多个搜索条件:
.search (this.value.replace(/;/g, '|'), true, false)
效果很好,我可以在列搜索中输入“1;3”以查找包含“1”或“3”的列中的所有值。我想搜索单个整数(例如,“1”不应匹配“12”)。我有一个有效的正则表达式,例如,要搜索 1 我可以使用 (?<![0-9])1(?![0-9])
.
如果我想搜索“1”或“3”:
(?<![0-9])1(?![0-9])|(?<![0-9])3(?![0-9])
我尝试了各种选项,但无法用正确的正则表达式替换输入的字符串。
我试过:
$( 'input', this.footer() ).on( 'keyup change', function () {
// build search string using (?<![0-9])1(?![0-9])
var arr = this.value.split(';');
var pattern = "(?<![0-9])" + arr.join("(?![0-9])|(?<![0-9])") + "(?![0-9])"
that
// .search( this.value.replace(/;/g, '|'), true, false )
.search( this.value = pattern, true, false )
.draw();
} );
我有一个 fiddle 可以玩 : http://jsfiddle.net/mjbeller/3zqswwzt/
单词边界有什么问题?
\b[13]\b
即
var pattern = new RegExp("\b(?:" + arr.join("|") + ")\b", "g" )
Avinash - 感谢边界上的帮助\b
我使用了它:
table.columns().every(function () {
var that = this;
$('input', this.footer()).on('keyup change', function () {
var arr = this.value.split(";");
var pattern = ("\b" + arr.join('\b|\b') + '\b'); // full word
// var pattern = this.value.replace(/;/g, '|') // fuzzy search
that
.search( pattern, true, false )
.draw();
});
});
我正在使用 https://datatables.net/examples/api/multi_filter.html
连同使用“;”的 vbrouchet 评论输入多个搜索条件:
.search (this.value.replace(/;/g, '|'), true, false)
效果很好,我可以在列搜索中输入“1;3”以查找包含“1”或“3”的列中的所有值。我想搜索单个整数(例如,“1”不应匹配“12”)。我有一个有效的正则表达式,例如,要搜索 1 我可以使用 (?<![0-9])1(?![0-9])
.
如果我想搜索“1”或“3”:
(?<![0-9])1(?![0-9])|(?<![0-9])3(?![0-9])
我尝试了各种选项,但无法用正确的正则表达式替换输入的字符串。
我试过:
$( 'input', this.footer() ).on( 'keyup change', function () {
// build search string using (?<![0-9])1(?![0-9])
var arr = this.value.split(';');
var pattern = "(?<![0-9])" + arr.join("(?![0-9])|(?<![0-9])") + "(?![0-9])"
that
// .search( this.value.replace(/;/g, '|'), true, false )
.search( this.value = pattern, true, false )
.draw();
} );
我有一个 fiddle 可以玩 : http://jsfiddle.net/mjbeller/3zqswwzt/
单词边界有什么问题?
\b[13]\b
即
var pattern = new RegExp("\b(?:" + arr.join("|") + ")\b", "g" )
Avinash - 感谢边界上的帮助\b
我使用了它:
table.columns().every(function () {
var that = this;
$('input', this.footer()).on('keyup change', function () {
var arr = this.value.split(";");
var pattern = ("\b" + arr.join('\b|\b') + '\b'); // full word
// var pattern = this.value.replace(/;/g, '|') // fuzzy search
that
.search( pattern, true, false )
.draw();
});
});