Jquery匹配文本字符串,但排除短语的某些if部分

Jquery匹配文本字符串,但排除短语的某些if部分,jquery,regex,Jquery,Regex,我有一个项目,我需要识别特定于性别的术语,但如果它包含在短语列表中,则忽略匹配项。我可以让下面的工作,我会认为这是非常低效的,但如果我试图添加任何更多的条款,我认为我超过了字符长度的行。我怎样才能更好地编码呢?是否可以有两个单独的数组?一个用于搜索包含单词边界的单词列表,另一个用于搜索排除的短语列表?当匹配被识别时,它会被一个红色框突出显示。谢谢 $( '#body' ).filter(function(index,obj) { if(/\b(boy)\b|\b(girl

我有一个项目,我需要识别特定于性别的术语,但如果它包含在短语列表中,则忽略匹配项。我可以让下面的工作,我会认为这是非常低效的,但如果我试图添加任何更多的条款,我认为我超过了字符长度的行。我怎样才能更好地编码呢?是否可以有两个单独的数组?一个用于搜索包含单词边界的单词列表,另一个用于搜索排除的短语列表?当匹配被识别时,它会被一个红色框突出显示。谢谢

$( '#body' ).filter(function(index,obj) {
            if(/\b(boy)\b|\b(girl)\b|\b(son)\b|\b(daughter)\b|\b(grandfather)\b|\b(grandmother)\b|\b(father)\b|\b(mother)\b|\b(de facto)\b|\b(de-facto)\b|\b(husband)\b|\b(wife)\b|\b(lady)\b|\b(female)\b|\b(woman)\b|\b(gentleman)\b|\b(male)\b|\b(man)\b|\b(uncle)\b/.test($(obj).clone().removeInnerElements().html().toLowerCase())){

                if(/(Wife Pension|Dad and Partner pay|Isle of Man|What a Man project)/.test($(obj).elements[0].innerHTML)) {
                    return false;
                }
                return true;
            }
            return false;
        },
        $(obj).css("border","solid 3px red");

如果有人感兴趣,这里是可行的解决方案。谢谢Terry的回复:

$( '#body' ).filter(function(index,obj){

            var html = $(obj).clone().removeInnerElements().html().toLowerCase();

            var blackList = [
              "boy",  
              "girl",  
              "son",  
              "daughter",  
              "grand\\s?father",  
              "grand\\s?mother",  
              "father",  
              "mother",  
              "de\\s?facto",  
              "husband",  
              "wife",  
              "lady",  
              "female",  
              "woman",  
              "gentleman",  
              "male",  
              "man"  
            ];

            var allowedTerms = [
                "wife\\spension",
                "dad\\sand\\spartner\\spay",
                "isle\\sof\\sman",
                "what\\sa\\sman\\sproject"
            ];

            for (i in allowedTerms) {
                var re = new RegExp("\\b"+allowedTerms[i]+"\\b", "g");
                if (re.test(html)) {
                    html = html.replace(re, "");
                }
            }

            for (i in blackList) {
                var re = new RegExp("\\b"+blackList[i]+"\\b");
                if (re.test(html)) {
                    return true;
                }
            }

            return false;
        },
    $(obj).css("border","solid 3px red");

您可以将单个术语放入JS数组中,然后使用正确的胶水(例如.\b |\b或|)将其连接起来,具体取决于您引用的过滤方法是将哪个过滤方法连接到传递给.test方法的变量中。类似这样的话:谢谢你的回复,特里。我看了你提供的链接,但没有信心从中恢复过来。如果有人能帮我写,我会非常感激,然后我可以反向工作,了解它是如何适合的。