正则表达式等于某些东西,但不等于其他东西

时间:2013-06-28 09:01:17

标签: regex

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

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

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

所以除了Fred之外什么都匹配,这有意义吗? 有谁帮我解释我是怎么做到的?

由于

编辑2: 我认为id显示我的实际脚本而不是,我正在做的是搜索一个表,并且即时页面加载我想要隐藏包含字符串的行。所以如果exlucde lenght大于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(); }

3 个答案:

答案 0 :(得分:2)

那将是

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

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

这也会找到包含AlfredFredo的字符串,因此如果您不想这样做,则需要告诉正则表达式只使用word boundaries查找整个单词:

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

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

答案 1 :(得分:2)

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

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

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

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

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

答案 2 :(得分:1)

var re = new RegExp('^\\s*Fred\\s*$','i');
if (inputVal.match(re)) {
    // Fred has been found
} else {
    // Anything has been found
}