Возвращение точного соответствия из массива JavaScript с помощью RegExp - PullRequest
0 голосов
/ 07 сентября 2011

У меня есть массив людей, и я хочу фильтровать по некоторым критериям, в этом случае я хочу найти «мужчину», который должен вернуть только один результат, однако с этим набором я получаю все обратно, потому что регулярное выражение захватывая женщину также.

Я попытался найти совпадения на "\ 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 ]

3 голосов
/ 07 сентября 2011

Не используйте регулярные выражения, когда это не нужно !!!

Используйте это вместо:

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 голосов
/ 07 сентября 2011

Слово "женщина" содержит слово "мужчина": -)

Ваш фильтр должен действительно просто смотреть на простое значение последнего элемента в подмассивах компонентов. Нет необходимости использовать регулярные выражения; просто сравните:

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

Это действительно все, что нужно сделать вашей функции isMale ().

2 голосов
/ 07 сентября 2011

На мой взгляд, начало / конец строковых символов было бы более уместным здесь:

var myMatch = new RegExp('^male$');
2 голосов
/ 07 сентября 2011

Почему бы просто не сопоставить с ^male, который будет началом строки, сразу после "мужского"?

1 голос
/ 07 сентября 2011

Если вы хотите сопоставить только предметы, которые являются "мужскими", просто сравните:

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

Нет необходимости использовать регулярное выражение для точного соответствия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...