2015-12-01 46 views
1

我已經陣列的Javascript正則表達式匹配在逗號的元件分隔的列表

var myArray = [ 
    { 
     "field1":"Value 1", 
     "IDs":"" 
    }, 
    { 
     "field1":"Value 2", 
     "IDs":"123" 
    }, 
    { 
     "field1":"Value 3", 
     "IDs":"1233; 222" 
    } 
]; 

而且對抗

var filterID = 123; 

篩選記錄在陣列的變量,這些ID可以是空的或有一個值或用分號分隔的多個值。結果應該始終返回所有空白ID加上所有匹配的ID。所以: filterID = 123應該返回'值1'和'值2',但不是'值3'。

很顯然,我不能檢查每個ID是否包含字符串比較的fitlerID,因爲它也應該返回'值3'。 '1233'包含'123'。

一種方法是拆分每個ID字符串並刪除分號並對每一位進行比較。

但是,我想知道是否有更簡單的方法來檢查使用正則表達式?

ie什麼正則表達式將返回數組的元素,其中id是空白或123作爲分號分隔列表中的值之一?

回答

2

可以使用界碑\b和OR(|)對一個空字符串:

/\b123\b|^$/ 

這意味着,如果它是一個完整的字123將只匹配(即,比其他字符包圍[A-Za-z0-9_])和^$將會捕獲一個空字符串。 More info on the \b marker here

這是一個demo of the regex和一個帶示例函數的fiddle

+0

你爲什麼要檢查空字符串? '\ b123 \ b'應該完成這項工作 – MaxZoom

+0

@MaxZoom從問題:「結果應該總是返回所有空白ID加上所有匹配的。」 –

+0

謝謝@EdCottrell。我怎麼會寫在JS中?我試過 \t'str =「1233; 222」; \t var test = str.match(/ \ b123 \ b |^$ /); \t console.log(test);' 返回undefined。 –

相關問題