RegExp

2011-09-07 11 views
0

을 사용하여 JavaScript 배열에서 정확한 일치 항목 반환 사람 배열이 있고 일부 조건을 필터링하려고합니다.이 경우에는 "남성"을 검색하고 싶지만이 집합을 사용하면 단 하나의 결과 만 반환합니다. 정규 표현식이 여성을 포획하기 때문에 모든 것을 다시 얻습니다.RegExp

"\ 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); 
+3

한 번만 더 상기시켜주세요. 왜이 정규식을 사용하고 있습니까? –

+0

이것은 훨씬 더 간단하게 할 수 있습니다 :'var {Filters} = people.filter (function (itm) {return itm [2] == "male";});' – Alxandr

+0

@Alxandr :'return itm [3]' –

답변

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/ (확인 콘솔)

만 정확히 "남성"있는 항목을 일치 시키려면
2

왜 그냥 바로 "남성"다음 라인의 시작이 될 것이다, ^male에 대해 일치?

2

단어 "여성은"정말 그냥 구성 요소 하위 배열의 마지막 요소의 간단한 값 봐야한다

당신 필터 :-) 단어 "남성"이 포함되어 있습니다. 정규식을 사용할 필요가 없습니다. 그냥 비교해보십시오 :

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

정말 "isMale()"함수가 수행해야하는 모든 작업입니다. 제 생각에는

2

는 문자열 문자의 시작/끝은 여기에 더 적합 할 것이다 : 그것은 필요하지 때

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

정말로, 당신은 간단하게'var myMatch =/^ male $ /;'를 할 수 있습니다. – sdleihssirhc

1

, 그럼 그냥 직접 비교 :

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

정확한 일치를 위해 정규식을 사용할 필요가 없습니다.