使用RegExp从JavaScript数组返回完全匹配

时间:2011-09-07 00:23:31

标签: javascript regex arrays

我有一群人想要过滤一些标准,在这种情况下我想搜索一个“男性”,它应该只返回一个结果但是这个集合我得到了所有东西,因为正则表达式是捕捉女性。

我尝试在“\ 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); 

5 个答案:

答案 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");
}

无需使用正则表达式进行完全匹配。