2015-11-09 1 views
0

У меня есть проект, где мне нужно определить терминологию, специфичную для пола, но игнорировать совпадение, если оно включено в список фраз. Я могу заставить следующее работать, я предполагаю, что это очень неэффективно, но если я попытаюсь добавить в список больше терминов, я думаю, что я превосхожу длину символа для строки. Как я мог кодировать это лучше, возможно ли иметь два отдельных массива - один для списка слов для поиска (включая границы слов), а другой для списка исключенных фраз? Когда матч идентифицирован, он выделяется красным полем. Благодарю.JQuery соответствует текстовой строке, но исключает часть, если часть фразы

$('#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"); 
+0

Вы можете просто поставить отдельные термины в массив JS, а затем присоединиться к нему с правильным клеем (например, '\ B | \ b' или' | ', в зависимости от фильтрации вас ссылаются) на переменную, которую вы передаете методу '.test()'. Что-то вроде этого: http://stackoverflow.com/questions/28280920/convert-array-of-words-strings-to-regex-and-use-it-to-get-matches-on-a-string – Terry

+0

Спасибо за ответ Терри. Я посмотрел на ссылку, которую вы предоставили, не имеет уверенности в том, чтобы от нее работать. – user3518221

+0

Если бы кто-нибудь мог мне помочь написать, пожалуйста, я бы очень признателен, тогда я могу работать в обратном направлении и понимать, как все это подходит. – user3518221

ответ

0

Если кому-то интересно, это рабочее решение. Спасибо Терри за ответ:

$('#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");