如何在DataTables中使用正则表达式进行多值或列搜索?

4
我正在使用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();
} );

我有一个需要演示的代码片段:http://jsfiddle.net/mjbeller/3zqswwzt/


JS不支持向前断言。 - anubhava
2个回答

2

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();
    });
});

0

单词边界有什么问题吗?

\b[13]\b

例如,

var pattern = new RegExp("\\b(?:" + arr.join("|") + ")\\b", "g" ) 

那不起作用 - 我在 https://regex101.com/r/xW8xU6/5 进行了测试 - \b[11]\b 会匹配 "1" 但不会匹配 "11" ... 我的问题也是如何在 DataTables 列搜索 https://datatables.net/examples/api/multi_filter.html 中使用多个值。 - mjbeller
我喜欢这个 - 我用括号打了出来,即\b[11]\b而不是\b11\b。这比我的正则表达式好多了,但我仍然不知道如何将其与datatables列搜索结合使用多个值。感谢您的帮助。 - mjbeller
我觉得我离成功更近了,但是还无法将正则表达式与DataTables集成- 这是我一直在使用的jsfiddle - http://jsfiddle.net/mjbeller/3zqswwzt/15/ - mjbeller

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接