我有一群人想要过滤一些标准,在这种情况下我想搜索一个“男性”,它应该只返回一个结果但是这个集合我得到了所有东西,因为正则表达式是捕捉女性。
我尝试在“\ bmale”或“/ \ bmale”上进行匹配,但没有得到任何回复。我知道我需要使用单词边界但由于某种原因它不能正常运行。
var people = [["Adelaide", 2, "yes", "female"],
["Ada", 2, "yes", "female"],
["Amanda", 1, "yes", "female"],
["Wolf", 3, "no", "male"],
["Rhonda", 1, "no", "female"]];
var isMale = function(x) {
var myMatch = new RegExp("male");
var test = String(x).match(myMatch);
return String(x).match(myMatch);
}
var filteredArray=people.filter(isMale);
document.writeln(filteredArray);
答案 0 :(得分:3)
在没有必要时不要使用正则表达式!!!
请改用:
var people = [
["Adelaide", 2, "yes", "female"],
["Ada", 2, "yes", "female"],
["Amanda", 1, "yes", "female"],
["Wolf", 3, "no", "male"],
["Rhonda", 1, "no", "female"]
];
var filteredArray = people.filter(function(el){
return el[3] == 'male';
});
http://jsfiddle.net/XRHtZ/(检查你的控制台)
答案 1 :(得分:2)
为什么不与^male
匹配,这将是该行的开头,紧接着是“男性”?
答案 2 :(得分:2)
“女性”一词包含“男性”一词: - )
你过滤器应该只看一下组件子阵列中最后一个元素的简单值。不需要使用正则表达式;只是比较:
return x[3] === "male";
这真的是你所有的“isMale()”函数需要做的。
答案 3 :(得分:2)
在我看来,字符串字符的开头/结尾在这里更合适:
var myMatch = new RegExp('^male$');
答案 4 :(得分:1)
如果您只想匹配完全“男性”的项目,那么只需直接比较:
function isMale(x) {
return(x == "male");
}
无需使用正则表达式进行完全匹配。