搜索过滤器使用类似于sql的正则表达式'a%'

时间:2017-11-13 22:27:27

标签: javascript jquery html html-table

我有这个搜索过滤器,我如何实现一个正则表达式使它像sql(像'a%')一样找到任何以 a 开头的值?

function SFName() {

    var input, filter, table, tr, td, i;
    input = document.getElementById("SFNameInput");
    filter = input.value.toUpperCase();
    table = document.getElementById("myTable");
    tr = table.getElementsByTagName("tr");

    for (i = 0; i < tr.length; i++) {
        td = tr[i].getElementsByTagName("td")[0];
        if (td) {
            if (td.innerHTML.toUpperCase().indexOf(filter) > -1) {
                tr[i].style.display = "";

            } else {
                tr[i].style.display = "none";
            }
        }
    }
}

这是我试过的:

function SFName() {

    var input, regex, table, tr, td, i;
    input = document.getElementById("SFNameInput").value;
    regex = /^/gi;
    table = document.getElementById("myTable");
    tr = table.getElementsByTagName("tr");

    for (i = 0; i < tr.length; i++) {
        td = tr[i].getElementsByTagName("td")[2];
        if (td) {
            if (regex.exec(td.innerHTML).indexOf(input) > -1) {
                tr[i].style.display = "";
            } else {
                tr[i].style.display = "none";
            }
        } 
    }
}

https://jsfiddle.net/j7t5d9ud/

2 个答案:

答案 0 :(得分:1)

如果您想查看一下,可以使用myStr.indexOf(value) === 0。这里似乎没有必要使用正则表达式。

这一行

if (regex.exec(td.innerHTML).indexOf(input) > -1) {

成为

if (td.innerHTML.indexOf(input) === 0) {

答案 1 :(得分:1)

要查找以a开头的任何值,请使用:/^a[\s\S]*//^a.*/

^确保匹配从头开始。

a匹配。

[\s\S].与所有人匹配。

*匹配前面字符的0或更多。在这种情况下,它是一个通配符。

修改

要实现此目的,您需要将过滤器替换为:

filter = new RegExp("^" + input.value + ".*", "i");

和条件:

if (td.innerHTML.match(filter)) {
  tr[i].style.display = "";
} else {
  tr[i].style.display = "none";
}

RegExp中的“i”使正则表达式不区分大小写。