0

我下面的正则表达式查询与例如 Bob 或 Bill 的单词完全匹配

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

我想要它做的是完全匹配任何东西(鲍勃或比尔等)但不匹配弗雷德

所以匹配除了 Fred 之外的任何东西,这有意义吗?有人帮我看看我是怎么做的吗?

谢谢

编辑 2:我认为 id 显示我的实际脚本,我正在做的是搜索一个表,并且我想隐藏包含字符串的行。因此,如果排除长度大于 0,则隐藏该行...

function searchPagingTable(inputVal, tablename, fixedsearch, exclude) {
    var table = $(tablename);
    table.find('tr:not(.header)').each(function (index, row) {
        var allCells = $(row).find('td');
        if (allCells.length > 0) {
            var found = false;
            allCells.each(function (index, td) {
                if (fixedsearch == 1) {
                    var regExp = new RegExp("^" + inputVal + "$", 'i');
                }
                else if (exclude.length > 0)
                {
                    var regExp = new RegExp("^(?!" + exclude + ")", "i");
                }
                else {
                    var regExp = new RegExp(inputVal, 'i');
                }
                if (regExp.test($(td).text())) {
                    found = true;
                    return false;
                }
            });
            if (found == true) $(row).show().removeClass('exclude'); else $(row).hide().addClass('exclude');
        }
    });
    pa

ginate(); }

4

3 回答 3

2

那将是

var exclude = "Fred"
var regExp = new RegExp("^(?!.*" + exclude + ")", "i");

此正则表达式匹配除包含Fred. 它实际上不匹配字符串中的任何字符,但如果您只是在寻找true/false结果,这就足够了。

这还将找到包含Alfredor的字符串Fredo,因此如果您不希望这样做,您需要告诉正则表达式仅使用单词边界查找整个单词:

var regExp = new RegExp("^(?!.*\\b" + exclude + "\\b)", "i");

您需要确保您的exclude字符串仅包含 ASCII 字母/数字(或下划线)才能正常工作。

于 2013-06-28T09:05:46.153 回答
2

您可以填充您希望匹配的名称列表:

var validNames = ['bob', 'bill'];

然后将每个输入小写并与列表匹配:

if (validNames.indexOf(inputVal.toLowerCase()) != -1) {
    // it's a good name
}

对于较旧的浏览器,您必须填充Array.indexOf()

于 2013-06-28T09:12:36.050 回答
1
var re = new RegExp('^\\s*Fred\\s*$','i');
if (inputVal.match(re)) {
    // Fred has been found
} else {
    // Anything has been found
}
于 2013-06-28T09:17:19.580 回答