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方法的变量中。类似这样的话:谢谢你的回复,特里。我看了你提供的链接,但没有信心从中恢复过来。如果有人能帮我写,我会非常感激,然后我可以反向工作,了解它是如何适合的。