2011-09-07 45 views
0

我有一羣人,並希望根據某些條件進行過濾,在這種情況下,我想搜索一個「男性」,但應該只返回一個結果,但使用此設置I因爲正則表達式也捕獲女性,所以一切都恢復了。使用RegExp從JavaScript數組返回完全匹配

我試過匹配「\ 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 filteredArray = 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"); 
} 

無需爲正確匹配使用正則表達式。

相關問題