Javascript RegExp对象

时间:2013-02-13 13:29:42

标签: javascript jquery

我使用下面的这个功能快速查找表格中的项目 我的问题是这个函数只搜索包含给定表中搜索字符串的文本 我一直在尽力修改它以匹配以搜索字符串开头但不起作用的文本。

function searchTable(inputVal)
{
    var table = $('#supplier_table_body');
    table.find('tr').each(function(index, row)
    {
        var allCells = $(row).find('td');
        if(allCells.length > 0)
        {
            var found = false;
            allCells.each(function(index, td)
            {
                var regExp = new RegExp(inputVal, '^i');
                if(regExp.test($(td).text()))
                {
                    found = true;
                    return false;
                }
            });
            if(found == true)$(row).show();else $(row).hide();
        }
    });
}

这是我的jquery

        $('#itemname').keyup(function()
    {
        searchTable($(this).val());
    });

4 个答案:

答案 0 :(得分:4)

string start anchor不是regex modifier flag,但需要成为表达式的一部分:

var regExp = new RegExp('^'+inputVal, 'i');

答案 1 :(得分:1)

不确定它是否有效,但您可以尝试在inputVal之前添加插入符号(^),同时创建RegExp。

这应该只允许以inputVal开头的单词。

干杯,

编辑:

像这样:

new RegExp("^" + inputVal, "i")

答案 2 :(得分:1)

我认为你应该使用\ b:new RegExp("\\b" + inputVal, "i")。它找到以inputVal开头的匹配项。

答案 3 :(得分:0)

这个答案是作为社区wiki回答发布的,因为我认为它解决了你所遇到的问题并简化了你的代码(但是作为评论发布的时间太长),所以我建议,尽管目前尚未经过测试,但仍在修改功能:

function searchTable(needle){
    var table = $('#supplier_table_body'),
        cells = table.find('td');
    cells.filter(function(){
        return this.textContent.indexOf(needle) !== 0;
    }).closest('tr').hide();
}

Simple proof of concept