【问题标题】:Returning an exact match from a JavaScript array using RegExp使用 RegExp 从 JavaScript 数组返回完全匹配
【发布时间】:2011-09-07 00:23:31
【问题描述】:

我有一组人,想根据一些条件进行过滤,在这种情况下,我想搜索一个“男性”,它应该只返回一个结果,但是有了这个集合,我得到了一切,因为正则表达式是捕捉女性也是如此。

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

【问题讨论】:

  • 再提醒我一次:你为什么要为此使用正则表达式?
  • 这可以更简单地完成:var filteredArray = people.filter(function(itm) { return itm[2] == "male"; });
  • @Joseph Silber - 因为过滤多维数组很方便,因为这就是 match() 返回的内容。除非有更简单的方法?
  • @firedrawndagger - 看看我的回答,然后回到这里。

标签: javascript regex arrays


【解决方案1】:

不要在不需要的时候使用正则表达式!!!

改用这个:

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/(检查您的控制台)

【讨论】:

    【解决方案2】:

    为什么不直接匹配^male,这将是行首,紧随其后的是“男性”?

    【讨论】:

      【解决方案3】:

      “女性”一词包含“男性”一词:-)

      您的过滤器实际上应该只查看组件子数组中最后一个元素的简单值。无需使用正则表达式;比较一下:

      return  x[3] === "male";
      

      这就是你的“isMale()”函数需要做的所有事情。

      【讨论】:

        【解决方案4】:

        在我看来,字符串字符的开头/结尾在这里更合适:

        var myMatch = new RegExp('^male$');
        

        【讨论】:

        • 真的,为了简洁起见,您可以直接使用var myMatch = /^male$/;
        【解决方案5】:

        如果你只想匹配完全是“男性”的项目,那么直接比较:

        function isMale(x) {
            return(x == "male");
        }
        

        无需使用正则表达式进行精确匹配。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-03-09
          • 2011-09-08
          • 1970-01-01
          • 2020-03-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多